Ինչպես տեղադրել ստանդարտ Notes սերվեր Rocky Linux 9-ում


Այս էջում

  1. Նախադրյալներ
  2. Քայլ 1 - Կարգավորել Firewall-ը
  3. Քայլ 2 - Տեղադրեք Docker-ը և Docker Compose-ը
  4. Քայլ 3 - Տեղադրեք Nginx
  5. Քայլ 4 - Տեղադրեք SSL-ը
  6. Քայլ 5 - Ներբեռնեք և կարգավորեք ստանդարտ նշումները
  7. Քայլ 6 - Գործարկել Ստանդարտ նշումների սերվերը
  8. Քայլ 7 - Տեղադրեք Standard Notes վեբ հավելվածը

    1. Տեղադրեք Git-ը
    2. Տեղադրեք NodeJS-ը
    3. Տեղադրեք Yarn
    4. Տեղադրեք PM2 փաթեթի կառավարիչ:
    5. Տեղադրեք վեբ հավելվածը
  9. Քայլ 8 - Կարգավորեք Nginx-ը
  10. Քայլ 9 - Կարգավորեք SELinux-ը
  11. Քայլ 10 - Օգտագործեք ստանդարտ նշումներ
  12. Քայլ 11 - Միացնել վճարովի գործառույթները
  13. Քայլ 12 - Կարգավորեք սերվերը ֆայլերի վերբեռնման համար
  14. Քայլ 13 - Թարմացրեք ստանդարտ Notes սերվերը և վեբ հավելվածը
  15. Եզրակացություն

Standard Notes-ը բաց կոդով և ամբողջությամբ կոդավորված նշումների հավելված է: Այն առաջարկում է և՛ անվճար, և՛ վճարովի պլաններ և առաջարկում է երկուսն էլ՝ ամպային հոսթինգ և այն ձեր սերվերում հյուրընկալելու տարբերակ: Դուք կարող եք օգտագործել ձեր սերվերը՝ տարբեր սարքերի միջև պահված նշումները համաժամեցնելու համար: Standard Notes-ն առաջարկում է հավելվածներ բոլոր աշխատասեղանի օպերացիոն համակարգերի և շարժական հարթակների համար:

Այս ձեռնարկը սովորեցնում է ձեզ, թե ինչպես ինքնուրույն հյուրընկալել ձեր ստանդարտ նշումների սերվերը Rocky Linux 9 մեքենայի վրա: Դուք նաև կսովորեք, թե ինչպես կարելի է անվճար ակտիվացնել վճարովի պլանները սերվերում և ինչպես միացնել ֆայլերի վերբեռնումը:

Նախադրյալներ

    Rocky Linux 9-ով աշխատող սերվեր՝ առնվազն 2 ԳԲ օպերատիվ հիշողությամբ:

    Ոչ արմատային օգտատեր՝ sudo արտոնություններով:

    Լիովին որակավորված տիրույթի անուն, որը մատնանշված է դեպի սերվերը: Մեր ձեռնարկի համար մենք կօգտագործենք standardnotes.example.com տիրույթը: Ձեզ անհրաժեշտ կլինի ևս երկու տիրույթի անուն՝ մեկը ֆայլերի սերվերի համար, իսկ երկրորդը՝ վեբ հավելվածի համար: Մենք կօգտագործենք snotes-files.example.com տիրույթը ֆայլերի սերվերի համար և snotes-web.example.com վեբ հավելվածի համար:

    Ամեն ինչ թարմացվում է։

    $ sudo dnf update
    

    Մի քանի փաթեթներ, որոնք անհրաժեշտ են ձեր համակարգին:

    $ sudo dnf install -y wget nano unzip yum-utils policycoreutils-python-utils
    

    Այս փաթեթներից որոշները կարող են արդեն տեղադրված լինել ձեր համակարգում:

Քայլ 1 - Կարգավորել Firewall-ը

Նախքան որևէ փաթեթ տեղադրելը, առաջին քայլը կարգավորել է firewall-ը HTTP-ի և HTTPS-ի համար պորտերը բացելու համար: Rocky Linux-ն օգտագործում է Firewalld Firewall-ը: Ստուգեք firewall-ի կարգավիճակը:

$ sudo firewall-cmd --state
running

Firewall-ը աշխատում է տարբեր գոտիների հետ, և հանրային գոտին լռելյայն է, որը մենք կօգտագործենք: Թվարկեք բոլոր ծառայություններն ու նավահանգիստները, որոնք ակտիվ են firewall-ում:

$ sudo firewall-cmd --zone=public --list-all

Այն պետք է ցույց տա հետևյալ արդյունքը.

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Բացեք HTTP և HTTPS պորտերը firewall-ում:

$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https

Կրկին ստուգեք firewall-ի կարգավիճակը:

$ sudo firewall-cmd --zone=public --list-all

Դուք պետք է տեսնեք նմանատիպ արդյունք:

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client http https ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Բոլոր փոփոխությունները դարձրեք մշտական և վերաբեռնեք firewall-ը՝ փոփոխությունները միացնելու համար:

$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

Քայլ 2 - Տեղադրեք Docker-ը և Docker Compose-ը

Տեղադրեք պաշտոնական Docker պահոցը:

$ sudo dnf config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Տեղադրեք Docker-ը:

$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Միացնել և գործարկել Docker daemon-ը:

$ sudo systemctl enable docker --now

Ստուգեք Docker ծառայության կարգավիճակը:

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-04-16 23:35:00 UTC; 5s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 23273 (dockerd)
      Tasks: 9
     Memory: 34.0M
        CPU: 176ms
     CGroup: /system.slice/docker.service
             ??23273 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Apr 16 23:35:00 standard-notes systemd[1]: Starting Docker Application Container Engine...
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.050964934Z" level=info msg="Starting up"
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.083526973Z" level=info msg="Loading containers: start."
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.654481705Z" level=info msg="Firewalld: interface docker0 already part of docker zone, returning"
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.772647844Z" level=info msg="Loading containers: done."
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.793814339Z" level=info msg="Docker daemon" commit=60b9add containerd-snapshotter=false storage-driver=overlay2 version=26.0.1
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.793962347Z" level=info msg="Daemon has completed initialization"
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.827030005Z" level=info msg="API listen on /run/docker.sock"
Apr 16 23:35:00 standard-notes systemd[1]: Started Docker Application Container Engine.

Ավելացրեք ձեր համակարգի օգտվողին Docker խմբին՝ Docker հրամանները գործարկելու համար sudo չօգտագործելու համար:

$ sudo usermod -aG docker $(whoami)

Դուրս գալուց հետո նորից մուտք գործեք ձեր սերվեր՝ փոփոխությունը միացնելու համար:

Ստուգեք փոփոխությունը:

$ groups
navjot wheel docker

Քայլ 3 - Տեղադրեք Nginx

Rocky Linux 9-ը մատակարարվում է Nginx-ի ավելի հին տարբերակով: Վերջին տարբերակը տեղադրելու համար անհրաժեշտ է օգտագործել պաշտոնական Nginx պահոցը:

Ստեղծեք և բացեք ֆայլը /etc/yum.repos.d/nginx.repo խմբագրման համար:

$ sudo nano /etc/yum.repos.d/nginx.repo

Դրա մեջ տեղադրեք հետևյալ կոդը.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Ավարտելուց հետո պահեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ հուշում է: Մենք կօգտագործենք Nginx-ի հիմնական տարբերակը և, հետևաբար, միացրել ենք հիմնական ռեպո վերը նշված ֆայլում՝ օգտագործելով enabled=1 հիմնական բաժնի տակ՝ կայունի փոխարեն: Դուք կարող եք ընտրել կամ մեկը:

Տեղադրեք Nginx-ը:

$ sudo dnf install nginx -y

Ստուգեք տեղադրումը:

$ nginx -v
nginx version: nginx/1.25.5

Միացնել և գործարկել Nginx սերվերի ծառայությունը:

$ sudo systemctl enable nginx --now

Ստուգեք ծառայության կարգավիճակը:

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-04-16 23:41:23 UTC; 6s ago
       Docs: http://nginx.org/en/docs/
    Process: 4886 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 4887 (nginx)
      Tasks: 3 (limit: 10819)
     Memory: 3.1M
        CPU: 11ms
     CGroup: /system.slice/nginx.service
             ??4887 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??4888 "nginx: worker process"
             ??4889 "nginx: worker process"

Apr 16 23:41:23 standard-notes systemd[1]: Starting nginx - high performance web server...
Apr 16 23:41:23 standard-notes systemd[1]: Started nginx - high performance web server.

Քայլ 4 - Տեղադրեք SSL-ը

SSL վկայագիր ստեղծելու համար մենք պետք է տեղադրենք Certbot-ը: Դրա համար մենք կօգտագործենք Snapd փաթեթի տեղադրիչը։ Քանի որ Rocky Linux-ը դրա հետ չի առաքվում, տեղադրեք Snapd տեղադրիչը: Այն պահանջում է EPEL (Extra Packages for Enterprise Linux) պահոցն աշխատելու համար:

Տեղադրեք EPEL պահեստը:

$ sudo dnf install epel-release -y

Տեղադրեք Snapd փաթեթը:

$ sudo dnf install snapd -y

Միացնել և գործարկել Snap ծառայությունը:

$ sudo systemctl enable snapd --now

Տեղադրեք Snap հիմնական փաթեթը և համոզվեք, որ Snapd-ի ձեր տարբերակը արդիական է:

$ sudo snap install core && sudo snap refresh core

Ստեղծեք անհրաժեշտ հղումներ Snapd-ի աշխատանքի համար:

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Տեղադրեք Certbot-ը:

$ sudo snap install --classic certbot

Օգտագործեք հետևյալ հրամանը՝ համոզվելու համար, որ Certbot հրամանը կարող է գործարկվել՝ ստեղծելով խորհրդանշական հղում դեպի /usr/bin գրացուցակը:

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ստուգեք Certbot տարբերակը:

$ certbot --version
certbot 2.10.0

Գործարկեք հետևյալ հրամանը՝ SSL վկայական ստեղծելու համար:

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d standardnotes.example.com

Վերոնշյալ հրամանը վկայական կներբեռնի ձեր սերվերի /etc/letsencrypt/live/standardnotes.example.com գրացուցակում:

Նույնը պետք է անենք Files ենթադոմեյնի համար:

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d snotes-files.example.com

Եվ վերջինը, կրկին վեբ հավելվածի համար:

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d snotes-web.example.com

Ստեղծեք Diffie-Hellman խումբ վկայագիր:

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Ստուգեք Certbot-ի նորացման ժամանակացույցի ծառայությունը:

$ systemctl list-timers

Դուք կգտնեք snap.certbot.renew.service որպես սպասարկվող ծառայություններից մեկը:

NEXT                        LEFT          LAST                        PASSED      UNIT                        ACTIVATES                   ----------------------------------------------------------------------------------------------------------------------------------  
Wed 2024-04-17 00:00:00 UTC 5min left   Tue 2024-04-16 23:29:44 UTC 24min ago    logrotate.timer              logrotate.service
Wed 2024-04-17 00:31:26 UTC 36min left  -                           -            dnf-makecache.timer          dnf-makecache.service
Wed 2024-04-17 11:00:00 UTC 11h left    -                           -            snap.certbot.renew.timer     snap.certbot.renew.service

Կատարեք գործընթացի չոր գործարկում՝ ստուգելու, թե արդյոք SSL-ի նորացումը լավ է աշխատում:

$ sudo certbot renew --dry-run

Եթե սխալներ չեք տեսնում, ամեն ինչ պատրաստ է: Ձեր վկայականը ինքնաբերաբար կերկարաձգվի:

Քայլ 5 - Ներբեռնեք և կարգավորեք ստանդարտ նշումները

Համոզվեք, որ դուք գտնվում եք ձեր համակարգի գլխավոր գրացուցակում:

$ cd ~

Ստեղծեք աշխատանքային գրացուցակ Standard Notes Server-ի համար և անցեք դրան:

$ mkdir standardnotes
$ cd ~/standardnotes

Ներբեռնեք շրջակա միջավայրի օրինակի ֆայլը Standard Notes GitHub պահոցից:

$ wget https://raw.githubusercontent.com/standardnotes/server/main/.env.sample

Ներբեռնված օրինակի ֆայլից ստեղծեք աշխատանքային միջավայրի ֆայլը:

$ cp .env.sample .env

.env ֆայլը կարգավորելու համար ձեզ անհրաժեշտ կլինի նույնականացման և գաղտնագրման երեք բանալի: Գործարկեք հետևյալ հրամանը՝ երեք առանձին ստեղներ ստեղծելու և դրանց արդյունքը պատճենելու համար:

$ openssl rand -hex 32

Ձեզ նույնպես անհրաժեշտ կլինի տվյալների բազայի ուժեղ գաղտնաբառ: Դուք կարող եք գործարկել հետևյալ հրամանը՝ տվյալների բազայի անվտանգ գաղտնաբառ ստեղծելու համար:

$ openssl rand -hex 12

Բացեք միջավայրի ֆայլը խմբագրման համար:

$ nano .env

Ընտրեք տվյալների բազայի հզոր գաղտնաբառ և ավելացրեք այն DB_PASSWORD փոփոխականին:

######
# DB #
######

DB_HOST=db
DB_PORT=3306
DB_USERNAME=std_notes_user
DB_PASSWORD=changeme
DB_DATABASE=standard_notes_db
DB_TYPE=mysql

#########
# CACHE #
#########

REDIS_PORT=6379
REDIS_HOST=cache
CACHE_TYPE=redis

########
# KEYS #
########

AUTH_JWT_SECRET=
AUTH_SERVER_ENCRYPTION_SERVER_KEY=
VALET_TOKEN_SECRET=

Ավելացրե՛ք նախկինում ստեղծված ստեղները և դրե՛ք դրանք KEYS բաժնում երեք փոփոխականների հետ:

Լռելյայնորեն, Օգտագործողի գրանցումը միացված է: Եթե ցանկանում եք անջատել հանրային օգտատերերի գրանցումը ձեր Standard Notes սերվերում, ապա շրջակա միջավայրի ֆայլում ավելացրեք հետևյալ փոփոխականը: Սակայն դա արեք միայն այն բանից հետո, երբ դրա վրա ստեղծեք ձեր առաջին հաշիվը: Եթե դուք օգտագործում եք կարգավորումը հենց սկզբում, դուք չեք կարողանա ինքներդ օգտագործել հավելվածը:

AUTH_SERVER_DISABLE_USER_REGISTRATION=true

Ավելացրեք հետևյալ փոփոխականը՝ ձեր Ստանդարտ նշումների ֆայլերի URL-ը սահմանելու համար:

PUBLIC_FILES_SERVER_URL=https://snotes-files.example.com

Ամբողջական .env ֆայլը պետք է նման լինի հետևյալին.

######
# DB #
######

DB_HOST=db
DB_PORT=3306
DB_USERNAME=std_notes_user
DB_PASSWORD=<YourDBPassword>
DB_DATABASE=standard_notes_db
DB_TYPE=mysql

#########
# CACHE #
#########

REDIS_PORT=6379
REDIS_HOST=cache
CACHE_TYPE=redis

########
# KEYS #
########

AUTH_JWT_SECRET=52b354ad5d8f11c995b4eed33870a1a7afbbc84b8da61e0b583660b075d0390c
AUTH_SERVER_ENCRYPTION_SERVER_KEY=fce4fe78972c3407be47127aee57d67e86b84afb628020b7ab6999edb3c905f1
VALET_TOKEN_SECRET=50aad911a283f252713139667b6475ac105280a220e009e05f733cf785630ce5

AUTH_SERVER_DISABLE_USER_REGISTRATION=true
PUBLIC_FILES_SERVER_URL=https://snotes-files.example.com

Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ հուշում են ավարտելուց հետո:

Ներբեռնեք Localstack bootstrap սցենարը GitHub պահոցից:

$ wget https://raw.githubusercontent.com/standardnotes/server/main/docker/localstack_bootstrap.sh

Տվեք սկրիպտին գործարկվող թույլտվություններ:

$ chmod +x localstack_bootstrap.sh

Ներբեռնեք Docker Compose Ֆայլը Standard Notes սերվերի համար GitHub պահոցից:

$ wget https://raw.githubusercontent.com/standardnotes/server/main/docker-compose.example.yml

Ներբեռնված օրինակի կազմման ֆայլից ստեղծեք աշխատանքային Docker կոմպոզիցիոն ֆայլ:

$ cp docker-compose.example.yml docker-compose.yml

Բացեք այն խմբագրելու համար:

$ nano docker-compose.yml

Փոխեք MYSQL_ROOT_PASSWORD և MYSQL_PASSWORD արժեքը .env ֆայլում նախկինում ընտրված տվյալների բազայի գաղտնաբառով: Ձեր Docker Compose Ֆայլը պետք է նման լինի հետևյալին.

services:
  server:
    image: standardnotes/server
    env_file: .env
    container_name: server_self_hosted
    restart: unless-stopped
    ports:
      - 3000:3000
      - 3125:3104
    volumes:
      - ./logs:/var/lib/server/logs
      - ./uploads:/opt/server/packages/files/dist/uploads
    networks:
      - standardnotes_self_hosted

  localstack:
    image: localstack/localstack:3.0
    container_name: localstack_self_hosted
    expose:
      - 4566
    restart: unless-stopped
    environment:
      - SERVICES=sns,sqs
      - HOSTNAME_EXTERNAL=localstack
      - LS_LOG=warn
    volumes:
      - ./localstack_bootstrap.sh:/etc/localstack/init/ready.d/localstack_bootstrap.sh
    networks:
      - standardnotes_self_hosted

  db:
    image: mysql:8
    container_name: db_self_hosted
    environment:
      - MYSQL_DATABASE=standard_notes_db
      - MYSQL_USER=std_notes_user
      - MYSQL_ROOT_PASSWORD=<YourDBPassword>
      - MYSQL_PASSWORD=<YourDBPassword>
    expose:
      - 3306
    restart: unless-stopped
    command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./data/import:/docker-entrypoint-initdb.d
    networks:
      - standardnotes_self_hosted

  cache:
    image: redis:6.0-alpine
    container_name: cache_self_hosted
    volumes:
      - ./data/redis/:/data
    expose:
      - 6379
    restart: unless-stopped
    networks:
      - standardnotes_self_hosted

networks:
  standardnotes_self_hosted:
    name: standardnotes_self_hosted

Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ հուշում է ավարտելուց հետո: Սա ավարտում է Standard Notes սերվերի կարգավորումների ներբեռնումն ու կազմաձևումը:

Քայլ 6 - Գործարկել Ստանդարտ նշումների սերվերը

Գործարկեք հետևյալ հրամանը՝ սերվերը գործարկելու համար.

$ docker compose up -d

Այս հրամանն ավարտելու համար մի քանի րոպե կպահանջվի: Այս ընթացքում գործընթացը կքաշի բոլոր համապատասխան Docker պատկերները և կստեղծի կոնտեյներներ բոլոր ծառայությունների համար: Այն նաև կլրացնի տվյալների բազան և կկատարի համապատասխան միգրացիաներ: CPU-ի օգտագործումը կարող է աճել մի քանի րոպեով, բայց շուտով այն պետք է իջնի:

Դուք կարող եք գտնել տեղեկամատյաններ Standard Notes սերվերի համար logs գրացուցակում: Դուք կարող եք ստուգել գործընթացի տեղեկամատյանները՝ օգտագործելով հետևյալ հրամանը.

$ tail -f logs/*.log

Սեղմեք Ctrl + C՝ գրանցամատյաններից դուրս գալու համար: Դուք կարող եք ստուգել գործող բեռնարկղերի կարգավիճակը՝ օգտագործելով հետևյալ հրամաններից որևէ մեկը:

$ docker compose ps
OR
$ docker ps

Դուք կստանաք նմանատիպ արդյունք:

NAME                     IMAGE                       COMMAND                  SERVICE      CREATED          STATUS                   PORTS
cache_self_hosted        redis:6.0-alpine            "docker-entrypoint.s…"   cache        16 minutes ago   Up 5 minutes             6379/tcp
db_self_hosted           mysql:8                     "docker-entrypoint.s…"   db           16 minutes ago   Up 5 minutes             3306/tcp, 33060/tcp
localstack_self_hosted   localstack/localstack:3.0   "docker-entrypoint.sh"   localstack   16 minutes ago   Up 5 minutes (healthy)   4510-4559/tcp, 4566/tcp, 5678/tcp
server_self_hosted       standardnotes/server        "docker-entrypoint.sh"   server       16 minutes ago   Up 5 minutes             0.0.0.0:3000->3000/tcp, :::3000->3000/tcp, 0.0.0.0:3125->3104/tcp, :::3125->3104/tcp

Դուք կարող եք ստուգել սերվերի առողջությունը՝ օգտագործելով հետևյալ հրամանը.

$ curl http://localhost:3000/healthcheck
OK

Standard Notes-ը լռելյայն օգտագործում է 3000 պորտը: Եթե դուք կարգավորել եք այլ նավահանգիստ .env ֆայլում, դուք պետք է թարմացնեք այն վերը նշված հրամանում:

Քայլ 7 - Տեղադրեք Standard Notes վեբ հավելվածը

Դուք կարող եք կամ օգտագործել առկա Standard Notes վեբ հավելվածը կամ հյուրընկալել ձերը: Մեր ձեռնարկի համար մենք ինքնուրույն կհյուրընկալենք Standard Notes վեբ հավելվածը:

Տեղադրեք Git-ը

Նախքան առաջ շարժվելը, մենք պետք է տեղադրենք մի քանի բան, որոնցից մեկը Git-ն է: Տեղադրեք Git-ը:

$ sudo dnf install git -y

Տեղադրեք NodeJS-ը

Հաջորդ քայլը NodeJS-ի տեղադրումն է: Դրա համար մենք կտեղադրենք Node 18.x LTS տարբերակը: NodeJS-ը տեղադրելու համար թողարկեք հետևյալ հրամանները.

$ curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
$ sudo dnf install -y nodejs

Հաստատեք տեղադրումը:

$ node --version
v18.20.2

Տեղադրեք Yarn

Մեզ անհրաժեշտ է նաև Yarn փաթեթի մենեջեր։ Տեղադրեք այն Node-ի միջոցով:

$ sudo npm install --global yarn

Տեղադրեք PM2 փաթեթի կառավարիչ:

Մեզ անհրաժեշտ է PM2, որպեսզի օգնի գործարկել Standard Notes վեբ հավելվածը որպես ֆոնային ծառայություն:

$ sudo npm install --global pm2

Տեղադրեք վեբ հավելվածը

Ստեղծեք գրացուցակ վեբ հավելվածի համար և անցեք դրան:

$ cd ~
$ mkdir snotes-app
$ cd ~/snotes-app

Ներբեռնեք Standard Notes հավելվածը GitHub-ից:

$ git clone https://github.com/standardnotes/app.git .

Կախվածությունները տեղադրելու համար օգտագործեք Yarn: Անտեսեք ցանկացած նախազգուշացում:

$ yarn install

Կառուցեք փաթեթներ վեբ հավելվածի համար:

$ yarn build:web

Անցեք վեբ գրացուցակին:

$ cd packages/web

Գործարկեք վեբ հավելվածը՝ օգտագործելով PM2:

$ pm2 start "yarn start" --name api

Դուք կարող եք ստուգել ծառայության կարգավիճակը՝ օգտագործելով հետևյալ հրամանը.

$ pm2 status
[PM2] Starting /usr/bin/bash in fork_mode (1 instance)
[PM2] Done.
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user     ? watching ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0  ? api    ? default     ? N/A     ? fork    ? 15090    ? 0s     ? 0    ? online    ? 0%       ? 26.2mb   ? navjot   ? disabled ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Հավելվածը կգործարկվի և հասանելի է 3001 նավահանգստի միջոցով: Մենք կօգտագործենք այս տեղեկատվությունը վեբ հավելվածի համար Nginx կոնֆիգուրացիա ստեղծելու համար:

PM2-ը չի վերագործարկում հավելվածը վերաբեռնումից հետո: Դա անելու համար մենք պետք է ստեղծենք գործարկման սցենար:

$ pm2 startup

Դուք պետք է ստանաք նմանատիպ արդյունք:

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

Գործարկեք ելքում տրված հրամանը:

$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

Սա կստեղծի և կակտիվացնի systemd ծառայության ֆայլը:

Պահպանեք գործընթացը, որը պետք է ինքնաբերաբար սկսվի վերագործարկման ժամանակ:

$ pm2 save

Քայլ 8 - Կարգավորեք Nginx-ը

Բացեք ֆայլը /etc/nginx/nginx.conf խմբագրման համար:

$ sudo nano /etc/nginx/nginx.conf

Ավելացրեք հետևյալ տողը include /etc/nginx/conf.d/*.conf; տողից առաջ:

server_names_hash_bucket_size 64;

Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ պահանջվում է:

Ստեղծեք և բացեք ֆայլը /etc/nginx/conf.d/standardnotes.conf խմբագրման համար:

$ sudo nano /etc/nginx/conf.d/standardnotes.conf

Դրա մեջ տեղադրեք հետևյալ կոդը. Փոխարինեք standardnotes.example.com ձեր տիրույթի անունով: Մենք սահմանել ենք client_max_body_size արժեքը 50 ՄԲ: Դուք կարող եք փոխել այն ըստ ձեր պահանջների:

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  http2 on;
  http3 on;
  quic_retry on;

  server_name standardnotes.example.com;

  client_max_body_size 50M;

  access_log  /var/log/nginx/standardnotes.access.log;
  error_log   /var/log/nginx/standardnotes.error.log;

  ssl_certificate      /etc/letsencrypt/live/standardnotes.example.com/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/standardnotes.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/standardnotes.example.com/chain.pem;

  ssl_session_timeout  5m;
  ssl_session_cache shared:MozSSL:10m;
  ssl_session_tickets off;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers off;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
  resolver 8.8.8.8;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_cache off;
  }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  standardnotes.example.com;
    return 301   https://$host$request_uri;
}

Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ պահանջվում է:

Վերոնշյալ ֆայլը նախատեսված է հիմնական Standard Notes հավելվածի համար: Հաջորդը, մենք պետք է կարգավորենք մեկ այլ ֆայլ Files ենթատիրույթի համար:

$ sudo nano /etc/nginx/conf.d/files-standardnotes.conf

Դրա մեջ տեղադրեք հետևյալ կոդը. Փոխարինեք snotes-files.example.com ձեր տիրույթի անունով: Մենք սահմանել ենք client_max_body_size փոփոխականի արժեքը 50 ՄԲ: Դուք կարող եք փոխել այն ըստ ձեր պահանջների:

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  http2 on;
  http3 on;
  quic_retry on;

  server_name snotes-files.example.com;

  client_max_body_size 50M;

  access_log  /var/log/nginx/files-standardnotes.access.log;
  error_log   /var/log/nginx/files-standardnotes.error.log;

  ssl_certificate      /etc/letsencrypt/live/snotes-files.example.com/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/snotes-files.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/snotes-files.example.com/chain.pem;

  ssl_session_timeout  5m;
  ssl_session_cache shared:MozSSL:10m;
  ssl_session_tickets off;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers off;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
  resolver 8.8.8.8;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  location / {
    proxy_pass http://127.0.0.1:3125;
    proxy_cache off;
  }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  snotes-files.example.com;
    return 301   https://$host$request_uri;
}

Եվ վերջապես, մենք պետք է ստեղծենք կոնֆիգուրացիայի ֆայլ վեբ հավելվածի համար:

$ sudo nano /etc/nginx/conf.d/web-standardnotes.conf

Դրա մեջ տեղադրեք հետևյալ կոդը.

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  http2 on;
  http3 on;
  quic_retry on;

  server_name snotes-web.example.com;

  client_max_body_size 50M;

  access_log  /var/log/nginx/standardnotes-web.access.log;
  error_log   /var/log/nginx/standardnotes-web.error.log;

  ssl_certificate      /etc/letsencrypt/live/snotes-web.example.com/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/snotes-web.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/snotes-web.example.com/chain.pem;

  ssl_session_timeout  5m;
  ssl_session_cache shared:MozSSL:10m;
  ssl_session_tickets off;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers off;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
  resolver 8.8.8.8;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  location / {
    proxy_pass http://127.0.0.1:3125;
    proxy_cache off;
  }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  snotes-web.example.com;
    return 301   https://$host$request_uri;
}

Ստուգեք ձեր Nginx կոնֆիգուրացիան:

$ sudo nginx -t

Կազմաձևման ֆայլերը միացնելու համար վերագործարկեք Nginx սերվերը:

$ sudo systemctl restart nginx

Քայլ 9 - Կարգավորեք SELinux-ը

Կիրառեք քաղաքականությունը, որպեսզի թույլատրեք կապեր հաստատել արտաքին հյուրընկալողների հետ:

$ sudo setsebool -P httpd_can_network_connect 1

Կիրառեք քաղաքականությունը՝ թույլ տալու Nginx-ին մուտք գործել PostgreSQL:

$ sudo setsebool -P httpd_can_network_connect_db 1

Քայլ 10 - Օգտագործեք ստանդարտ նշումներ

Եթե ձեր դիտարկիչում բացեք https://standardnotes.example.com URL-ը, ապա պետք է տեսնեք հետևյալ ելքը:

Սա նշանակում է, որ ձեր սերվերը գործում է և աշխատում է: Ստանդարտ նշումներ օգտագործելու համար դուք պետք է օգտագործեք պաշտոնական հավելվածները: Մեր ձեռնարկի համար մենք կօգտագործենք նրանց վեբ հավելվածը, բայց մեթոդը կմնա նույնը աշխատասեղանի և բջջային հավելվածների համար:

Բացեք URL https://snotes-web.example.com՝ վեբ հավելված մուտք գործելու համար: Սեղմեք Ստեղծել անվճար հաշիվ հղումը էջի ներքևի ձախ մասում և լրացրեք ձեր էլ․ հասցեն և գաղտնաբառը: Կտտացրեք Ընդլայնված գործառույթներ կոճակին, ապա նշեք Պատվերով համաժամացման սերվերի տարբերակը,  և լրացրեք https://standardnotes.example.com URL-ը: տուփը։

Շարունակելու համար սեղմեք Հաջորդ կոճակը: Ձեզանից նորից կպահանջվի ձեր գաղտնաբառը:

Մուտք գործելուց հետո կարող եք սկսել գրառումներ ստեղծել և օգտագործել հավելվածը:

Քայլ 11 - Միացնել վճարովի գործառույթները

Մինչ այժմ մենք միացրել ենք «Standard Notes» հավելվածի հիմնական գործառույթները: Այնուամենայնիվ, դուք կարող եք ակտիվացնել վճարովի սերվերի կողմից որոշ գործառույթներ, և Standard Notes-ը թույլ է տալիս դրանք կատարել անվճար: Սա չի ակտիվացնի հաճախորդի կողմից պրեմիում գործառույթները, ինչպիսիք են Super Notes-ը և Nested պիտակները: Դուք կարող եք ձեռք բերել խիստ զեղչված բաժանորդագրություն Standard Notes Offline պլանի միջոցով՝ դրանք ակտիվացնելու համար:

Դուք պետք է գործարկեք հետևյալ հրամանը Standard Notes գրացուցակից՝ ինքնակառավարվող հավելվածում սերվերի կողմից պրեմիում գործառույթները միացնելու համար:

$ cd ~/standardnotes

$ docker compose exec db sh -c "MYSQL_PWD=\$MYSQL_ROOT_PASSWORD mysql \$MYSQL_DATABASE -e \
      'INSERT INTO user_roles (role_uuid , user_uuid) VALUES ((SELECT uuid FROM roles WHERE name=\"PRO_USER\" ORDER BY version DESC limit 1) ,(SELECT uuid FROM users WHERE email=\"EMAIL@ADDR\")) ON DUPLICATE KEY UPDATE role_uuid = VALUES(role_uuid);' \
    "

$ docker compose exec db sh -c "MYSQL_PWD=\$MYSQL_ROOT_PASSWORD mysql \$MYSQL_DATABASE -e \
      'INSERT INTO user_subscriptions SET uuid=UUID(), plan_name=\"PRO_PLAN\", ends_at=8640000000000000, created_at=0, updated_at=0, user_uuid=(SELECT uuid FROM users WHERE email=\"EMAIL@ADDR\"), subscription_id=1, subscription_type=\"regular\";' \
    "

Վերբեռնեք վեբ հավելվածը, և վճարովի գործառույթները պետք է ակտիվացվեն ձեր հաշվի համար: Հաճախորդի կողմի գործառույթներն ակտիվացնելու համար բացեք ձեր հավելվածի նախապատվությունները, ընտրեք Ընդհանուր >> Անցանց ակտիվացում ընտրացանկը և մուտքագրեք ակտիվացման կոդը, որը ստացել եք՝ գնելով անցանց պլանը:

Քայլ 12 - Կարգավորեք սերվերը ֆայլերի վերբեռնման համար

Ֆայլի վերբեռնումը Standard Notes-ի վճարովի հատկանիշ է և չի աշխատի առանց օֆլայն պլանը գնելու: Մենք միացրել ենք հատուկ API URL-ը ֆայլերի վերբեռնման համար: Բայց նրանք դեռ չեն աշխատի։ Որպեսզի դրանք աշխատեն, մենք պետք է համապատասխան թույլտվություններ տանք վերբեռնումների գրացուցակին: Վերբեռնումները պահվում են ~/standardnotes/uploads գրացուցակում: Թույլտվությունները փոխելու համար գործարկեք հետևյալ հրամանները.

$ sudo chmod -R 775 data
$ sudo chmod -R 755 uploads
$ sudo chown -R 1001.1001 uploads

Այժմ Standard Notes-ը զրո է սահմանում որպես վերբեռնման սահմանաչափ յուրաքանչյուր օգտագործողի համար: Դա նշանակում է, որ ոչ մի օգտատեր չի կարող ֆայլեր վերբեռնել, եթե ձեռքով քվոտա չտրվի: Հետևաբար, ֆայլերի վերբեռնումն արդյունավետ դարձնելու վերջին քայլը վճարովի օգտատիրոջ հաշվի համար ֆայլերի քվոտան միացնելն է: Մենք կարող ենք դա անել՝ կատարելով SQL հարցում տվյալների բազայի կոնտեյների ներսում:

Մուտք գործեք MySQL վահանակ՝ տվյալների շտեմարանի կոնտեյների ներսում:

$ docker exec -it db-standalone mysql -u std_notes_user -p
Enter password:

Երբ ներս մտնենք MySQL վահանակում, եկեք ստուգենք տվյալների բազաների ցանկը:

mysql > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| standard_notes_db  |
+--------------------+
3 rows in set (0.01 sec)

Անցեք ստանդարտ նշումների տվյալների բազայի:

mysql > use standard_notes_db;

Գործարկեք հետևյալ SQL հրամանը՝ վերևում ակտիվացված վճարովի օգտատիրոջը 10 ԳԲ ֆայլի քվոտա ավելացնելու համար:

mysql> INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), "FILE_UPLOAD_BYTES_LIMIT", 10737418240, FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email="[email "));

Այստեղ 10737418240-ը վերաբերում է ընդհանուր բայթերին, որը թարգմանվում է 10 ԳԲ: Դուք կարող եք փոփոխել այս համարը այն ամենի համար, ինչ ձեզ հարկավոր է:

Դուրս եկեք MySQL կեղևից և տվյալների բազայի կոնտեյներից:

mysql > exit

Քայլ 13 - Թարմացրեք ստանդարտ Notes սերվերը և վեբ հավելվածը

Standard Notes Server-ի արդիականացման առաջին քայլը գոյություն ունեցող բեռնարկղերի դադարեցումն ու հեռացումն է:

$ cd ~/standardnotes
$ docker compose stop
$ docker compose remove --orphans

Ձեռք բերեք վերջին .env, localstack_bootstrap.sh և Docker ֆայլերը GitHub պահոցից: Կատարեք անհրաժեշտ փոփոխությունները և փոխարինեք ձեր առկա ֆայլերը թարմացվածներով:

Նորից գործարկեք Սերվերի բեռնարկղերը:

$ docker compose up -d

Ձեր թարմացված համաժամացման սերվերն այժմ աշխատում է:

Անցեք վեբ հավելվածների գրացուցակին:

$ cd ~/snotes-app

Անցեք վեբ հավելվածի արմատային գրացուցակին:

$ cd packages/web

Դադարեցրեք գոյություն ունեցող գործընթացը:

$ pm2 stop api

Վերադարձեք ծրագրի հիմնական գրացուցակին:

$ cd ~/snotes-app

Քաշեք վերջին փոփոխությունները GitHub-ի պահոցից:

$ git pull

Վերադարձեք վեբ գրացուցակի ներսում:

$ cd packages/web

Սկսեք գործընթացը:

$ pm2 start api

Ձեր վեբ հավելվածը պետք է թարմացվի:

Եզրակացություն

Սա ավարտում է մեր ձեռնարկը Rocky Linux 9 սարքի վրա Standard Notes սերվերի տեղադրման և կազմաձևման վերաբերյալ: Եթե ունեք հարցեր, տեղադրեք դրանք ստորև ներկայացված մեկնաբանություններում: