diff --git a/Taskfile.yml b/Taskfile.yml index 2e65e0b..10a8516 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -43,7 +43,6 @@ tasks: --inventory="{{.HOSTS_FILE}}" --extra-vars="ansible_python_interpreter=/usr/bin/python3" {{.TAGS}} - -vvv ansible/configuration.yml configure-all: diff --git a/ansible/configuration.yml b/ansible/configuration.yml index e49f5c7..ad29d83 100644 --- a/ansible/configuration.yml +++ b/ansible/configuration.yml @@ -11,6 +11,7 @@ nomie_db_port: "{{ base_port + 7 }}" gitea_port: "{{ base_port + 8 }}" keycloak_port: "{{ base_port + 9 }}" + outline_port: "{{ base_port + 10 }}" vars_files: - vars/vars.yml @@ -193,3 +194,52 @@ USER_GID: '{{ uc_result.group }}' tags: - apps + + - import_role: + name: docker-app + vars: + username: outline + extra_groups: + - docker + ssh_keys: + - '{{ lookup("file", "files/av_id_rsa.pub") }}' + env: + PROJECT_NAME: outline + DOCKER_PREFIX: outline + IMAGE_PREFIX: outline + CONTAINER_PREFIX: outline + WEB_SERVER_PORT: '127.0.0.1:{{ outline_port }}' + USER_UID: '{{ uc_result.uid }}' + USER_GID: '{{ uc_result.group }}' + # Postgres + POSTGRES_USER: '{{ outline.postgres_user }}' + POSTGRES_PASSWORD: '{{ outline.postgres_password }}' + POSTGRES_DB: 'outline' + # See sample https://github.com/outline/outline/blob/main/.env.sample + NODE_ENV: 'production' + SECRET_KEY: '{{ outline.secret_key }}' + UTILS_SECRET: '{{ outline.utils_secret }}' + DATABASE_URL: 'postgres://{{ outline.postgres_user }}:{{ outline.postgres_password }}@postgres:5432/outline' + PGSSLMODE: 'disable' + REDIS_URL: 'redis://redis:6379' + URL: 'https://outline.vakhrushev.me' + FILE_STORAGE: 's3' + AWS_ACCESS_KEY_ID: '{{ outline.s3_access_key }}' + AWS_SECRET_ACCESS_KEY: '{{ outline.s3_secret_key }}' + AWS_REGION: 'ru-central1' + AWS_S3_ACCELERATE_URL: '' + AWS_S3_UPLOAD_BUCKET_URL: 'https://storage.yandexcloud.net' + AWS_S3_UPLOAD_BUCKET_NAME: 'av-outline-wiki' + AWS_S3_FORCE_PATH_STYLE: 'true' + AWS_S3_ACL: 'private' + OIDC_CLIENT_ID: '{{ outline.oidc_client_id }}' + OIDC_CLIENT_SECRET: '{{ outline.oidc_client_secret }}' + OIDC_AUTH_URI: 'https://kk.vakhrushev.me/realms/outline/protocol/openid-connect/auth' + OIDC_TOKEN_URI: 'https://kk.vakhrushev.me/realms/outline/protocol/openid-connect/token' + OIDC_USERINFO_URI: 'https://kk.vakhrushev.me/realms/outline/protocol/openid-connect/userinfo' + OIDC_LOGOUT_URI: 'https://kk.vakhrushev.me/realms/outline/protocol/openid-connect/logout' + OIDC_USERNAME_CLAIM: 'email' + OIDC_DISPLAY_NAME: 'KK' + + tags: + - apps diff --git a/ansible/templates/Caddyfile.j2 b/ansible/templates/Caddyfile.j2 index db359c4..ae5c87b 100644 --- a/ansible/templates/Caddyfile.j2 +++ b/ansible/templates/Caddyfile.j2 @@ -70,3 +70,11 @@ kk.vakhrushev.me { to 127.0.0.1:{{ keycloak_port }} } } + +outline.vakhrushev.me { + tls anwinged@ya.ru + + reverse_proxy { + to 127.0.0.1:{{ outline_port }} + } +} diff --git a/ansible/vars/vars.yml b/ansible/vars/vars.yml index 791464b..9ee3060 100644 --- a/ansible/vars/vars.yml +++ b/ansible/vars/vars.yml @@ -1,30 +1,52 @@ $ANSIBLE_VAULT;1.1;AES256 -65666138373239633935333762383264653866666535303063643966366333633365303136306464 -6433303436326365376437636166303038373338323937640a373130323236646165643930303838 -30626361316164373263353838636134663966323337323262386664663066373935313366643037 -3435363363663737640a353539323331653461383833323332306539643535653934333335656232 -62306234353264663337616336313432393631623662396634653931363466303466346138376333 -37373564663163666333383837386564613530663266636535626534613135623438633664663035 -62653261396565353763346466623537663562323031383162323566316233336636623231316362 -35363330366662626636626435656464333862373562396231316661653733383132633238353133 -61383566636239393865336264336130633934636361323336333238666436623963386337623261 -30323962623966373636646635306637386537393263356335323464346434386662626436613163 -62343736326362663539653234303432316230613231326231363838623735326666333239333562 -39353061626166353239626330326162343736336463393236646164323163313062656563616532 -66336633363535623536636237313431396134316161356464633533656637336630383130346464 -66373363336238393866633364326564666438346335633464646461643035663164643261353265 -35306632383532653333313033313034326165343062303033333934613566316539323031373039 -34643637303562613766663562626237613231336639376563356533393965333362653266316263 -34656238646638663962666430356263383838653061613135303738386336343630346561653032 -32626633663939323265373430323134306461396335633135663836393934396630373963623733 -34303531626165396662386362663863313537646466353537366532653563393261336661666233 -63636238626661396437336663643432363438376431356337663664303132313931613632353937 -61646338323738386363333837313239363734633536623766343331396232646465303661333761 -62393462373231323737663263343835393464656438343530343539383437666263326134663535 -38383632653364373437303638333037646566376465646537303964386335346463313639613231 -39643766386265643032353033623831643037313631663861663737313635313838663739373466 -34343561303465376264383939343766613531376263353061396134383931306635616337383063 -33343464613732363038613538626134366266366338313064633165343530623932646639626431 -62316535633132313837396461386663616531373161396238333362346265323065393334616539 -65326635326662613963313562316634656134366636333631393838333338643564646566326665 -3564 +66343038363033616463663935663066663937373633383364626362656565333861373734626265 +3239643335313165383962663832633935393039616134620a626436643836623037316233373461 +62623330376438633933353965356262386138383864313461623062343836313739623562336431 +3433356538323334640a663835313739646231316639616562373335646461616239383335373565 +34303533376563393464303137633639396364366261376532623462653030363238343233623864 +37316337383736626262643133636337623532343334386665643637386265313933386332663030 +38663839303431656332356334303764353932316465363032386431376235313734666238383030 +64323236636531643932663838383336616236303231326265333735346664633732363963653166 +31616264356132396162356435373363666165353231336262386265393637393563663739383161 +31393835353165636137356536353239366339636638646532396632666332393630663631626261 +30313761393931386236353763663363393436643864643735326233323262626438616338326162 +34333236653030326564363465316463663263346565343534326363333361663238626362356666 +32663362616361623235393362363766316366616337666637353039653862646632393065336239 +33666264366366323333663238623138613863653233623931373766373739383766333139653734 +30333031363134326263343437656238613865306236306235396262306133653334616637376637 +34663533386134373139343263373265326261666161326334626137313930643964656165636135 +37656532653633616232356361326139613061633936333337383536616364623035623865663431 +61633433656462373730303264363830376137323666326561333065326339303430663731633031 +30326632373337663733363965383836623930366432323763333265363937363430333965316566 +30653161353266623532383331336139383336626162306435613634363261623430343634656161 +62353233633165626339633931616237316638653566363534333130373366633464346662343738 +34336265343936653566623464356531336561626139633466316632373639666330666138343965 +64326334343162626666366635363034303566303836376566613632353633346139616534333438 +30633731333434666135656238633664376338303166373131643334343030326632316265373433 +61646534663135613433343864353936623661653337646461353233336365363030376465666666 +31626531303039333932306531303833313731386435633438373363633461623433613265643435 +31643233386564323135653363363038386366353232303032316361613733313966393664656362 +31373039393933326631343163383335376561616433623332646239303562363738393865336562 +35613662376238613339316130386365643836663334346362623832623639636330363365616263 +36613962396537653837303161613236616537383736666431313164393639353130653563343536 +32373764376438366566396437376137383133303365623532626537373832346665333634353364 +36326531323865323866623532383666333230646234383539313430396234313430323439393631 +61313332336162343232393937343231626532303037323163333165626230646134633036393732 +35633633613366643736343462336434633438333634653639623734346665383832316161383539 +34656231306535613639613737626630666430326432633737616435613965613738363836373535 +34613739643966653833393639313064356131393533653037376264306636353538373838613166 +61633032643564383030323066623863643037306639653164356236353564616634376537383534 +63343638303762656635383837613535646235313137336336343964333633306662633866343037 +64393264653737656238663939663137616637356238636265313438373363316166373862653331 +65383039393939373365633738306239373631333663613463313036393563643537306562386631 +61313064653831343138343832366261613936316330386332613034383139373861363038613030 +66616665646434363731346234313261353035323263333035616531316161356536653536613136 +63356136373035363864356633373139643761323734343030353130353866653337336338316364 +39643466386139346233373837656165393732326662353934656563386436313964643131376264 +61336331353937373965653363396438303561636531626330333063316533616566316165646562 +64306164343162646634366235363333636638353562656438343937346666643565303264323265 +65353961623937623665366536333366663462376135396132663161383563383738333232653435 +30366637393065653233323261633063373235306238323032623562326261613938646535396536 +34633730393234363866643533396435646137313365636136643239383662643837626565663739 +31313130626230353162393037653265633336343537313564373531636166666532356138633331 +336233346133636565623763646438373536 diff --git a/app/outline/docker-compose.prod.yml b/app/outline/docker-compose.prod.yml new file mode 100644 index 0000000..a8b1f6a --- /dev/null +++ b/app/outline/docker-compose.prod.yml @@ -0,0 +1,57 @@ +version: "3.2" +services: + + outline-app: + image: outlinewiki/outline:0.76.2-0 + ports: + - "${WEB_SERVER_PORT}:3000" + depends_on: + - postgres + - redis + environment: + NODE_ENV: '${NODE_ENV}' + SECRET_KEY: '${SECRET_KEY}' + UTILS_SECRET: '${UTILS_SECRET}' + DATABASE_URL: '${DATABASE_URL}' + PGSSLMODE: '${PGSSLMODE}' + REDIS_URL: '${REDIS_URL}' + URL: '${URL}' + FILE_STORAGE: '${FILE_STORAGE}' + AWS_ACCESS_KEY_ID: '${AWS_ACCESS_KEY_ID}' + AWS_SECRET_ACCESS_KEY: '${AWS_SECRET_ACCESS_KEY}' + AWS_REGION: '${AWS_REGION}' + AWS_S3_ACCELERATE_URL: '${AWS_S3_ACCELERATE_URL}' + AWS_S3_UPLOAD_BUCKET_URL: '${AWS_S3_UPLOAD_BUCKET_URL}' + AWS_S3_UPLOAD_BUCKET_NAME: '${AWS_S3_UPLOAD_BUCKET_NAME}' + AWS_S3_FORCE_PATH_STYLE: '${AWS_S3_FORCE_PATH_STYLE}' + AWS_S3_ACL: '${AWS_S3_ACL}' + OIDC_CLIENT_ID: '${OIDC_CLIENT_ID}' + OIDC_CLIENT_SECRET: '${OIDC_CLIENT_SECRET}' + OIDC_AUTH_URI: '${OIDC_AUTH_URI}' + OIDC_TOKEN_URI: '${OIDC_TOKEN_URI}' + OIDC_USERINFO_URI: '${OIDC_USERINFO_URI}' + OIDC_LOGOUT_URI: '${OIDC_LOGOUT_URI}' + OIDC_USERNAME_CLAIM: '${OIDC_USERNAME_CLAIM}' + OIDC_DISPLAY_NAME: '${OIDC_DISPLAY_NAME}' + + redis: + image: redis:7.2-bookworm + ports: + - "6379:6379" + volumes: + - ./redis.conf:/redis.conf + command: ["redis-server", "/redis.conf"] + + postgres: + image: postgres:16.3-bookworm + ports: + - "5432:5432" + volumes: + - ./data/postgres:/var/lib/postgresql/data + environment: + POSTGRES_USER: '${POSTGRES_USER}' + POSTGRES_PASSWORD: '${POSTGRES_PASSWORD}' + POSTGRES_DB: '${POSTGRES_DB}' + +volumes: + database-data: diff --git a/tasks.py b/tasks.py index 0a6a0ac..eee645d 100644 --- a/tasks.py +++ b/tasks.py @@ -22,6 +22,11 @@ def deploy_wiki(context): deploy("keycloak", compose_file="docker-compose.prod.yml", dirs=["data"]) +@task(name="deploy:outline") +def deploy_wiki(context): + deploy("outline", compose_file="docker-compose.prod.yml", dirs=["data/postgres"]) + + def read_host(): with open(SERVER_HOST_FILE) as f: return f.read().strip()