Ako nainštalovať viacero diskusných fór na ten istý server
Inštalácia viacerých diskusných fór nie je jednoduchá, ale nie je ani zložitá. Tu sú kroky na inštaláciu viacerých diskusných fór v kontajneroch Docker na rovnakom serveri Linux.
Inštalácia diskurzu je skutočne jednoduchá, ak ide len o jednu inštanciu diskurzu na serveri. Veci sa skomplikujú, keď chcete nainštalovať viacero inštancií Discourse na rovnaký server, aby ste znížili náklady.
Oficiálna inštalácia diskurzu nedodržiava bežné postupy Docker. Inštalátor diskurzu najprv vykoná niečo, čo sa nazýva bootstrapping, čo sa vám zobrazí ako postup inštalácie hostiteľa. Po dokončení procesu zavádzania spustí spúšťač kontajner s názvom „aplikácia“ na základe spätnej väzby, ktorú od vás získal počas prvej inštalácie.
Takýto postup hybridnej inštalácie je odlišný, pokiaľ ide o jeho nastavenie s inými webovými službami a aplikáciami, ako je WordPress.
V tomto návode vám ukážem, ako nainštalovať viacnásobnú inštaláciu diskurzu spolu s ďalšími aplikáciami založenými na dockeroch na jednom serveri Linux. Nie je to vôbec ťažké, ak poznáte základy príkazového riadku Docker a Linux.
Inštalácia viacerých diskusných fór na rovnaký server
Vo všeobecnosti sa konfigurácia viacerých diskurzov chápe ako konfigurácia viacerých miest a proces tu bol ilustrovaný.
Oficiálne Discourse neposkytuje žiadnu dokumentáciu pre viacnásobnú inštaláciu diskurzu na jeden server. Ale netráp sa. Ukážem vám proces inštalácie pre 3-5 samostatných samostatných kontajnerov bežiacich pod Nginx, pričom každý samostatný kontajner zodpovedá jeho vlastnej príslušnej doméne.
V tomto návode používam Ubuntu 18.04. Uistite sa, že máte Docker nainštalovaný v Ubuntu alebo v ktorejkoľvek distribúcii Linuxu, ktorú používate.
Na rýchle nasadenie servera Linux v cloude navrhujem použiť poskytovateľa cloudového servera, ako je Linode.
Ako príklad názvu domény v návode som použil doménu.com. Uistite sa, že ste ho zmenili podľa svojich vlastných domén alebo subdomén.
1. Zmeňte záznamy DNS svojej domény
Na paneli záznamov DNS vášho poskytovateľa názvu domény sa uistite, že doména aj subdomény (vrátane www) smerujú na IP adresu vášho servera.
Napríklad pre koreňovú doménu ponechajte pole názvu hostiteľa prázdne (alebo @) a pre subdomény použite pri nastavovaní adresy IP servera zástupný znak „*“.
2. Vymeňte priestor
Aby ste sa uistili, že všetky vaše kontajnerové aplikácie sú v pohode a po ich nasadení vám nikdy nedôjde pamäť, je nevyhnutné, aby ste mali vo svojom systéme potrebný odkladací priestor.
Vždy môžete upraviť swap podľa dostupnej pamäte RAM vo vašom systéme. Odkladací priestor sa môžete rozhodnúť na základe balíka kontajnerov aplikácií na jednom serveri a odhadu ich kumulatívneho využitia pamäte RAM. Discourse tiež skontroluje a nakonfiguruje swap za vás.
3. Vytvorte sieť Docker
Táto dokovacia sieť umožní kontajnerom vzájomnú komunikáciu podľa potreby. Pre jednoduchšie pochopenie to nazvime reťaz.
Túto sieť použijete pri konfigurácii všetkých svojich kontajnerov.
docker network create chain4. Nastavte Nginx Reverse Proxy
Teraz pokračujte v nastavovaní Nginx Reverse Proxy. Všimnite si, že toto funguje ako rozhranie, ktoré na seba mapuje všetky rôzne kontajnerové porty, aby ste k nim mali prístup prostredníctvom adries URL. Môžete ho tiež označiť ako „materský kontajner“.
docker run --name nginx-proxy --net chain -p 80:80 -p 443:443 -v ~/certs:/etc/nginx/certs -v /etc/nginx/vhost.d -v /usr/share/nginx/html -v /var/run/docker.sock:/tmp/docker.sock:ro --label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy -d --restart always jwilder/nginx-proxy5. Nastavenie Let's Encrypt Nginx Proxy Companion
Všimnite si, že hovoríme dockeru, aby používal zväzky, ktoré sú už deklarované v prvom kontajneri nginx-proxy. Používa rovnakú „reťazovú“ sieť, ktorú ste vytvorili v kroku 3.
docker run --name letsencrypt-nginx-proxy-companion --net chain -v ~/certs:/etc/nginx/certs:rw -v /var/run/docker.sock:/var/run/docker.sock:ro --volumes-from nginx-proxy -d --restart always jrcs/letsencrypt-nginx-proxy-companionTento sprievodný kontajner pre nginx-proxy sa stará o nastavenie certifikátov SSL pomocou Let’s Encrypt. Uvidíte to pri konečnom nastavovaní kontajnerov diskurzu.
6. Presmerovanie WWW cez Nginx (CNAME sa nevyžaduje, voliteľný krok pre použitie subdomén)
Aby ste zabezpečili presmerovanie požiadaviek domain.com na www.domain.com ako na akúkoľvek inú stránku, musíte vykonať jeden ďalší krok.
Zadajte kontajner nginx-proxy:
docker exec -ti nginx-proxy /bin/bashTeraz by ste videli koreňovú výzvu, ako je táto:
root@8d04249cc62c:/app#Pamätáte si umiestnenie /etc/nginx/vhost.d, ktoré som spomenul v kroku 4? Tu vytvorte nový súbor, ktorý bude rovnaký ako názov vašej koreňovej domény. Nemáte tu vim ani nano. Namiesto inštalácie Vim alebo Nano použite príkaz cat.
cat >> /etc/nginx/vhost.d/domain.comPri ďalšej výzve bude čokoľvek, čo napíšete, upravovať súbor. Uistite sa teda, že ste v nasledujúcom riadku nahradili www.domain.com svojou vlastnou doménou:
rewrite ^/(.*)$ https://www.domain.com/$1 permanent;
Uložte ho stlačením klávesu Enter a potom Ctrl+D. Zadajte východ, aby ste sa dostali von z kontajnera.
root@8d04249cc62c:/app# exitZastavme všetky vyššie uvedené kontajnery (v danom poradí), ktoré ste doteraz vytvorili. Nepoužijete reštart, jednoducho ich spustite znova, pretože nechcete, aby iné kontajnery počúvali pri reštartovaní každého z nich.
docker stop nginx-proxy
docker stop letsencrypt-nginx-proxy-companion
docker start nginx-proxy
docker start letsencrypt-nginx-proxy-companion7. Naklonujte oficiálny obrázok Discourse Docker
Podľa oficiálnej príručky naklonujte oficiálny obraz diskurzu do adresára /var/discourse. Toto je miesto, kde môže Discourse po nastavení uložiť všetky svoje zväzky Docker patriace do príslušných kontajnerov.
sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse8. Skopírujte Samostatnú konfiguráciu
Ďalším krokom je zabezpečiť, aby ste pred úpravou súboru /var/discourse/standalone.yml skopírovali súbor /var/discourse/containers/ ako app.yml podľa svojich požiadaviek.
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.ymlTypický standalone.yml vyzerá takto.
9. Pripravte si samostatnú konfiguráciu
Teraz musíte tento súbor upraviť, pretože vaša konfigurácia bude založená na nginx.
Porty 80 a 443 už ten istý používa. Už máte aj náš kontajner letsencrypt a musíte ukázať Discourse svoju existujúcu sieť Docker, do ktorej ho chcete umiestniť.
Pri nastavovaní domény tu budete potrebovať aj poštový server na konfiguráciu e-mailov s upozornením na fórum (tu som použil Sendgrid).
Upozorňujeme, že LETSENCRYPT_EMAIL (na oznamovanie aktualizácií SSL) a DISCOURSE_DEVELOPER_EMAILS (pre správcu) sa môžu v prípade potreby líšiť.
nano /var/discourse/containers/app.yml10. Prispôsobte samostatnú konfiguráciu
Nasleduje môj upravený súbor premenovaný na app.yml na účely demonštrácie. Odporúča sa upraviť svoj vlastný súbor yml, aby ste sa vyhli problémom so zarovnaním.
this is the all-in-one, standalone Discourse Docker container template
#
After making changes to this file, you MUST rebuild
/var/discourse/launcher rebuild app
#
BE VERY CAREFUL WHEN EDITING!
YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
visit http://www.yamllint.com/ to validate this file as needed
templates:
"templates/postgres.template.yml"
"templates/redis.template.yml"
"templates/web.template.yml"
"templates/web.ratelimited.template.yml"
Uncomment these two lines if you wish to add Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
which TCP/IP ports should this container expose?
If you want Discourse to share a port with another webserver like Apache or nginx,
see https://meta.discourse.org/t/17247 for details
expose:
- "80"
#- "80:80" # http
#- "443:443" # https
docker_args:
- "--net chain"
params:
db_default_text_search_config: "pg_catalog.english"
## Set db_shared_buffers to a max of 25% of the total memory.
## will be set automatically by bootstrap based on detected RAM, or you can override
#db_shared_buffers: "256MB"
## can improve sorting performance, but adds memory usage per-connection
#db_work_mem: "40MB"
## Which Git revision should this container use? (default: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## How many concurrent web requests are supported? Depends on memory and CPU cores.
## will be set automatically by bootstrap based on detected CPUs, or you can override
#db_shared_buffers: "256MB"
## can improve sorting performance, but adds memory usage per-connection
#db_work_mem: "40MB"
## Which Git revision should this container use? (default: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## How many concurrent web requests are supported? Depends on memory and CPU cores.
## will be set automatically by bootstrap based on detected CPUs, or you can override
#UNICORN_WORKERS: 3
## TODO: The domain name this Discourse instance will respond to
## Required. Discourse will not work with a bare IP number.
DISCOURSE_HOSTNAME: 'domain.com'
VIRTUAL_HOST: 'domain.com,www.domain.com'
LETSENCRYPT_HOST: 'domain.com,www.domain.com'
LETSENCRYPT_EMAIL: '[email '
## Uncomment if you want the container to be started with the same
## hostname (-h option) as specified above (default "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: List of comma delimited emails that will be made admin and developer
## on initial signup example '[email ,[email '
DISCOURSE_DEVELOPER_EMAILS: '[email '
## TODO: The SMTP mail server used to validate new accounts and send notifications
# SMTP ADDRESS, username, and password are required
# WARNING the char '#' in SMTP password can cause problems!
DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: apikey
DISCOURSE_SMTP_PASSWORD: yourpassword
DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, default true)
## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
#LETSENCRYPT_ACCOUNT_EMAIL: [email
## The http or https CDN address for this Discourse instance (configured to pull)
## see https://meta.discourse.org/t/14857 for details
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
The Docker container is stateless; all data is stored in /shared
volumes:
volume:
host: /var/discourse/shared/standalone
guest: /shared
volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
Plugins go here
see https://meta.discourse.org/t/19157 for details
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
Any custom commands to run after building
run:
exec: echo "Beginning of custom commands"
## If you want to set the 'From' email address for your first registration, uncomment and change:
## After getting the first signup email, re-comment the line. It only needs to run once.
#- exec: rails r "SiteSetting.notification_email='[email '"
exec: echo "End of custom commands" Dvojnásobne skontroluje nasledujúce podrobnosti:
Konfigurácia portu by mala byť:
expose:
- "80"
# - "80:80" # http
# - "443:443" # httpsExistujúci názov siete správne nakonfigurovaný v súbore, ako je uvedené vyššie.
docker_args:
- "--net chain"V opačnom prípade sa pri kontrole domény po inštalácii zobrazí prázdna stránka.
12. Bootstrap and Launch
Po uložení vyššie uvedeného súboru spustite nasledujúce príkazy:
cd /var/discourse
./launcher bootstrap appZaberie to značné množstvo času. Na konci procesu bootstrap budete vyzvaní:
./launcher start appVšimnite si, že ak by ste súbor pomenovali ako xyz.yml, príkaz by sa zodpovedajúcim spôsobom zmenil (./launcher start xyz).
Je to názov spusteného kontajnera, ktorý môžete skontrolovať pomocou príkazu docker ps . Teraz, keď navštívite doménu vo svojom prehliadači, uvidíte nasledujúcu stránku:
13. Nastavenia SSL
Od tohto momentu je proces registrácie pomerne jednoduchý. Po dokončení registrácie prejdite na paneli administrátora Dockera do časti Nastavenia> Zabezpečenie a povoľte možnosť „vynútiť https “.
Po uložení kontajner zastavte a znova ho spustite:
./launcher stop app
./launcher start appPo chvíli začne SSL fungovať na vašom fóre. Uistite sa, že sa staráte aj o závislosti pre https.
14. Nainštalujte viac inštancií diskurzu do samostatných kontajnerov
Ak chcete získať viac kontajnerov diskurzu, musíte zopakovať rovnaký proces od kroku 8.
Spočiatku ste používali aplikáciu. Teraz by ste mali používať iné názvy ako app2, app3 atď.
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app2.ymlPre každý z nich by sa tiež vyžadoval ďalší krok na zadanie nového umiestnenia (povedzme samostatné2, samostatné3 atď.) v príslušných súboroch yml pre zväzky Docker (skontrolujte krok 10). Samozrejme, budete musieť zmeniť aj názov domény.
## The Docker container is stateless; all data is stored in /shared
volumes:
volume:
host: /var/discourse/shared/standalone2
guest: /shared
volume:
host: /var/discourse/shared/standalone2/log/var-log
guest: /var/logPotom postupujte podľa zvyšných krokov a na rovnakom serveri budete mať nainštalovaných viac diskurzu.
Dúfam, že tento článok bude pre vás užitočný pri nastavovaní viac ako jedného diskusného fóra s príslušnými kontajnermi Docker.
Ak máte otázky alebo návrhy, neváhajte zanechať komentár nižšie.


