diff --git a/deploy_couchdb_to_flyio_v2_with_swap.ipynb b/deploy_couchdb_to_flyio_v2_with_swap.ipynb new file mode 100644 index 0000000..a16809a --- /dev/null +++ b/deploy_couchdb_to_flyio_v2_with_swap.ipynb @@ -0,0 +1,238 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "History:\n", + "- 18, May, 2023: Initial.\n", + "- 19, Jun., 2023: Patched for enabling swap." + ], + "metadata": { + "id": "HiRV7G8Gk1Rs" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2Vh0mEQEZuAK" + }, + "outputs": [], + "source": [ + "# Configurations\n", + "import os\n", + "os.environ['region']=\"nrt\"\n", + "os.environ['couchUser']=\"alkcsa93\"\n", + "os.environ['couchPwd']=\"c349usdfnv48fsasd\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SPmbB0jZauQ1" + }, + "outputs": [], + "source": [ + "# Delete once\n", + "!rm ./fly.toml" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Nze7QoxLZ7Yx" + }, + "outputs": [], + "source": [ + "# Installation\n", + "# You have to set up your account in here.\n", + "!curl -L https://fly.io/install.sh | sh\n", + "!/root/.fly/bin/flyctl auth signup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MVJwsIYrbgtx" + }, + "outputs": [], + "source": [ + "# Generate server\n", + "!/root/.fly/bin/flyctl launch --auto-confirm --generate-name --detach --no-deploy --region ${region}\n", + "!/root/.fly/bin/fly volumes create --region ${region} couchdata --size 2 --yes" + ] + }, + { + "cell_type": "code", + "source": [ + "# Check the toml once.\n", + "!cat fly.toml" + ], + "metadata": { + "id": "2RSoO9o-i2TT" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zUtPZLVnbvdQ" + }, + "outputs": [], + "source": [ + "# Modify fly.toml\n", + "## Port modification\n", + "!sed -i 's/8080/5984/g' fly.toml\n", + "## Add user into.\n", + "!echo -e \"\\n[env]\\n COUCHDB_USER = \\\"${couchUser}\\\"\" >> ./fly.toml\n", + "## Set the location of an ini file which to save configurations persistently via erlang flags.\n", + "!echo -e \"\\nERL_FLAGS=\\\"-couch_ini /opt/couchdb/etc/default.ini /opt/couchdb/etc/default.d/ /opt/couchdb/etc/local.d /opt/couchdb/etc/local.ini /opt/couchdb/data/persistence.ini\\\"\" >> ./fly.toml\n", + "## Mounting volumes to store data and ini file.\n", + "!echo -e \"\\n[mounts]\\n source=\\\"couchdata\\\"\\n destination=\\\"/opt/couchdb/data\\\"\" >> ./fly.toml\n", + "!cat fly.toml" + ] + }, + { + "cell_type": "code", + "source": [ + "# Make the Dockerfile to modify the permission of the ini file. If you want to use a specific version, you should change `latest` here.\n", + "!echo -e \"\\n[build]\\n dockerfile = \\\"./Dockerfile\\\"\" >> ./fly.toml" + ], + "metadata": { + "id": "LQPsZ_dYxkTu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "!echo -e \"FROM couchdb:latest\\nRUN sed -i '2itouch /opt/couchdb/data/persistence.ini && chmod +w /opt/couchdb/data/persistence.ini && fallocate -l 512M /swapfile && chmod 0600 /swapfile && mkswap /swapfile && echo 10 > /proc/sys/vm/swappiness && swapon /swapfile && echo 1 > /proc/sys/vm/overcommit_memory' /docker-entrypoint.sh\" > ./Dockerfile" + ], + "metadata": { + "id": "44cBeGJ9on5i" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Check dockerfile\n", + "!cat ./Dockerfile" + ], + "metadata": { + "id": "ai2R3BbpxRSe" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xWdsTCI6bzk2" + }, + "outputs": [], + "source": [ + "# Configure password\n", + "!/root/.fly/bin/flyctl secrets set COUCHDB_PASSWORD=${couchPwd}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "k0WIQlShcXGa" + }, + "outputs": [], + "source": [ + "# Deploy server\n", + "# Be sure to shutdown after the test.\n", + "!/root/.fly/bin/flyctl deploy --detach --remote-only\n", + "!/root/.fly/bin/flyctl status" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0ySggkdlfq7M" + }, + "outputs": [], + "source": [ + "import subprocess, json\n", + "result = subprocess.run([\"/root/.fly/bin/flyctl\",\"status\",\"-j\"], capture_output=True, text=True)\n", + "if result.returncode==0:\n", + " hostname = json.loads(result.stdout)[\"Hostname\"]\n", + " os.environ['couchHost']=\"https://%s\" % (hostname)\n", + " print(\"Your couchDB server is https://%s/\" % (hostname))\n", + "else:\n", + " print(\"Something occured.\")\n" + ] + }, + { + "cell_type": "code", + "source": [ + "# Finish setting up the CouchDB\n", + "!curl -X POST \"${couchHost}/_cluster_setup\" -H \"Content-Type: application/json\" -d \"{\\\"action\\\":\\\"enable_single_node\\\",\\\"username\\\":\\\"${couchUser}\\\",\\\"password\\\":\\\"${couchPwd}\\\",\\\"bind_address\\\":\\\"0.0.0.0\\\",\\\"port\\\":5984,\\\"singlenode\\\":true}\" --user \"${couchUser}:${couchPwd}\"" + ], + "metadata": { + "id": "cGlSzVqlQG_z" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "!curl -X PUT \"${couchHost}/_node/nonode@nohost/_config/chttpd/require_valid_user\" -H \"Content-Type: application/json\" -d '\"true\"' --user \"${couchUser}:${couchPwd}\"\n", + "!curl -X PUT \"${couchHost}/_node/nonode@nohost/_config/chttpd_auth/require_valid_user\" -H \"Content-Type: application/json\" -d '\"true\"' --user \"${couchUser}:${couchPwd}\"\n", + "!curl -X PUT \"${couchHost}/_node/nonode@nohost/_config/httpd/WWW-Authenticate\" -H \"Content-Type: application/json\" -d '\"Basic realm=\\\"couchdb\\\"\"' --user \"${couchUser}:${couchPwd}\"\n", + "!curl -X PUT \"${couchHost}/_node/nonode@nohost/_config/httpd/enable_cors\" -H \"Content-Type: application/json\" -d '\"true\"' --user \"${couchUser}:${couchPwd}\"\n", + "!curl -X PUT \"${couchHost}/_node/nonode@nohost/_config/chttpd/enable_cors\" -H \"Content-Type: application/json\" -d '\"true\"' --user \"${couchUser}:${couchPwd}\"\n", + "!curl -X PUT \"${couchHost}/_node/nonode@nohost/_config/chttpd/max_http_request_size\" -H \"Content-Type: application/json\" -d '\"4294967296\"' --user \"${couchUser}:${couchPwd}\"\n", + "!curl -X PUT \"${couchHost}/_node/nonode@nohost/_config/couchdb/max_document_size\" -H \"Content-Type: application/json\" -d '\"50000000\"' --user \"${couchUser}:${couchPwd}\"\n", + "!curl -X PUT \"${couchHost}/_node/nonode@nohost/_config/cors/credentials\" -H \"Content-Type: application/json\" -d '\"true\"' --user \"${couchUser}:${couchPwd}\"\n", + "!curl -X PUT \"${couchHost}/_node/nonode@nohost/_config/cors/origins\" -H \"Content-Type: application/json\" -d '\"app://obsidian.md,capacitor://localhost,http://localhost\"' --user \"${couchUser}:${couchPwd}\"" + ], + "metadata": { + "id": "JePzrsHypY18" + }, + "execution_count": null, + "outputs": [] + } + ], + "metadata": { + "colab": { + "provenance": [], + "private_outputs": true, + "include_colab_link": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + }, + "gpuClass": "standard" + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file