简介
最近,我担心自己的睡觉的脸,所以我记录下来并观看了它。
是@ k-waragai完全失去了下巴,完全处于Pipimi-chan的状态。
我决定减肥是在十二月。
顺便问一下,您在工作期间是否保留工作日志等?
我做笔记的目的是通过口头表达和与他人分享来确认没有疏忽。
通过继续总结在实施过程中发现的事实,背景,错误等作为备忘录
在创建PR时创建描述时,它也很有用,并且还可以节省时间。
这很简单,因为您只需粘贴 ??? del>
如果您提到著名的备忘录工具,
- 印象笔记
- 黑客MD
- Qiita或Qiita团队
- DocBase
周围没有很多人在使用吗?
其中,这次要注意" HackMD"
我想我会写一个故事,让我在尝试本地操作并添加我最喜欢的功能时感到很高兴。
(这是一篇文章,每个人都应该使用它,因为" Hack MD"是总体上最好的)
为什么HackMD好?我比较了
通过比较著名的备忘录工具,我发现DocBase和HackMD很好。
*摘要基于个人印象
<表格>
tr>
header>
<身体>
tr>
tr>
tr>
tr>
tbody>
table>
我认为Qiita Team或DocBase可以很好地用作个人文档,但是它经过了精心设计,可以用作工作备忘录。
它不是很好,因为它将与重要文档混在一起。
DocBase具有一个名为"专用"的角色设置,因此我曾经为自己的记事板创建一个文档。
但是,它并没有持续很长时间,因为按下保存按钮对我来说很麻烦。
(最后我用Atom做笔记)
我尝试过的最好的方法是" HackMD"。
HackMD可以实时进行共同编辑,并且没有保存按钮,因此始终可以保存。
您还可以导出到PDF,幻灯片等。
您可以进行5种类型的设置,例如只有您自己可以看到的"私人"设置和"锁定"这使得其他人无法编辑。
HackMD和CodiMD
概述
HackMD是作为实时降价共同编辑工具免费提供的。
HackMD还具有一个称为CodiMD的开源版本。
?? hackmdio / codimd:CodiMD-所有平台上的实时协作降价注释。
CodiMD作为开源提供了HackMD的大部分功能。
您只需克隆这些即可轻松移动HackMD。
许可证也是AGPL。
很好,嘿... .. ..
此外,最近,文档得到了很好的维护和增强。
?? CodiMD文档--HackMD
甚至更多!
Heroku上有一个一键式构建按钮,
?? https://hackmd.io/c/codimd-documentation//s/codimd-heroku-deployment
k8s头盔可用,
?? https://hackmd.io/c/codimd-documentation//s/codimd-kubernetes-deployment
可以使用Docker映像,
?? https://hackmd.io/c/codimd-documentation//s/codimd-docker-deployment
感觉就像CodiMD,因为它在许多领域都有很多覆盖物(?'Ω'?)?
让我们先克隆
节点似乎是
(所以看来您应该使它等于或大于8且等于或小于12)
顺便说一句,大约一年前,我不保证节点6或更高!我应该说
如果您注意到它,则它与该版本兼容,因此维护得相当好(?Ω?*)至少可以说是最好的吗?
我自己为本地开发构建Docker的美好回忆...
苹果系统
1 2 | $ git clone https://github.com/hackmdio/codimd.git $ cd codimd |
我查看了环境变量和配置文件,并总结了必要的信息
有关环境变量,请参见此处。
- 配置
生产操作中应设置的最小项目如下
config.json
<表格>
tr>
header>
<身体>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tr>
tbody>
table>
环境变量
<表格>
tr>
header>
<身体>
tr>
tr>
tr>
tr>
tr>
tbody>
table>
让我们在本地运行它(Docker)
如您在
文档中所见,分发了codimd的图像。
?? Docker部署
但是,这次我不会使用它。
原因是我过去做的时候是节点6.x系统
因为11.x系列是当时的最新版本,所以我真的很想使其成为11.x系列,因此我以最低要求的配置自己制造了它,因此我将对其进行介绍。
步骤1.创建docker-compose.yml
苹果系统
1 | $ touch docker-compose.yml |
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | version: '3' services: # MySQL database: image: mariadb:10.4.4 container_name: hackmd_mysql environment: MYSQL_USER: "${MYSQL_USER:-hackmd}" MYSQL_PASSWORD: "${MYSQL_PASSWORD:-hackmdpass}" MYSQL_DATABASE: "${MYSQL_DATABASE:-hackmd}" MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD:-rootpassword}" volumes: - database:/var/lib/mysql - ./provisioning/resources/utf8mb4.cnf:/etc/mysql/conf.d/utf8mb4.cnf restart: always ports: - "${MYSQL_USE_PORT:-3306}:3306" networks: - app-net # Node.js app: build: context: . dockerfile: ./provisioning/Dockerfile container_name: hackmd_app tty: true volumes: - .:/app - /app/node_modules working_dir: /app env_file: - ./provisioning/docker-env restart: always depends_on: - database ports: - "${APP_USE_PORT:-3000}:3000" networks: - app-net networks: app-net: driver: bridge volumes: database: |
Step2。创建Dcokerfile等
苹果系统
1 2 3 4 5 | $ mkdir -p provisioning/resources $ touch provisioning/Dockerfile $ touch provisioning/resources/utf8mb4.cnf $ touch provisioning/docker-env $ touch provisioning/resources/docker-entrypoint.sh |
- Docker文件
供应/ Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | FROM node:11.14.0-stretch ENV DEBCONF_NOWARNINGS=yes # Set some default config variables ENV DOCKERIZE_VERSION=v0.6.1 RUN wget https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-linux-amd64-${DOCKERIZE_VERSION}.tar.gz && \ tar -C /usr/local/bin -xzvf dockerize-linux-amd64-${DOCKERIZE_VERSION}.tar.gz && \ rm dockerize-linux-amd64-${DOCKERIZE_VERSION}.tar.gz RUN mkdir /app WORKDIR /app COPY . /app # update RUN apt-get update # install RUN apt-get install -y build-essential vim RUN yarn install && \ yarn global add webpack && \ npm run build EXPOSE 3000 COPY ./provisioning/resources/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] CMD ["node", "app.js"] |
- utf8mb4.cnf
供应/资源/ utf8mb4.cnf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # MariaDB-specific config file. # Read by /etc/mysql/my.cnf [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] collation-server=utf8mb4_general_ci init-connect='SET NAMES utf8mb4' character-set-server=utf8mb4 # Import all .cnf files from configuration directory !includedir /etc/mysql/mariadb.conf.d/ |
- docker环境
.envrc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # dockerで動かすのはdevelopment前提です。 NODE_ENV=development CMD_CONFIG_FILE=config.json DEBUG=true CMD_LOGLEVEL=info CMD_PROTOCOL_USESSL=false CMD_URL_ADDPORT=false CMD_USECDN=true CMD_ALLOW_ANONYMOUS=false CMD_ALLOW_ANONYMOUS_EDITS=false CMD_ALLOW_FREEURL=false CMD_DEFAULT_PERMISSION=limited CMD_EMAIL=false CMD_ALLOW_PDF_EXPORT=true CMD_ALLOW_EMAIL_REGISTER=false CMD_ALLOW_GRAVATAR=true CMD_IMAGE_UPLOAD_TYPE=filesystem # Change Require CMD_DB_URL=mysql://hackmd:hackmdpass@database:3306/hackmd # Githubログイン使いたいなら # CMD_GITHUB_CLIENTID={YOUR_GITHUB_CLIENT_ID} # CMD_GITHUB_CLIENTSECRET={YOUR_GITHUB_SECRET_KEY} # option: Docker Environment # MYSQL_USER= # MYSQL_PASSWORD= # MYSQL_DATABASE= # MYSQL_ROOT_PASSWORD= # APP_USE_PORT= |
- docker-entrypoint.sh
调配/资源/ docker-entrypoint.sh
1 2 3 4 5 6 7 | #!/usr/bin/env bash dockerize -wait tcp://database:3306 -timeout 30s node_modules/.bin/sequelize db:migrate exec "$@" |
步骤3.准备配置文件等
苹果系统
1 2 | $ cp config.json.example config.json $ cp .sequelizerc.example .sequelizerc |
- config.json
一次,不要考虑提高到SAML或图像S3,而要做到最低。
我想使用Github登录名登录,但是稍后我将对其进行更改,因此在此我将不做。
config.json
1 2 3 4 5 6 7 8 9 10 | { "development": { "useSSL": false, "tmpPath": "./tmp/", "defaultNotePath": "./public/default.md", "docsPath": "./public/docs", "viewPath": "./public/views", "uploadsPath": "./public/uploads" } } |
Step4。让我们尝试使用docker up
苹果系统
1 | $ docker-compose up -d |
现在您可以通过访问
地方发展在进行中吗(?'Ω'?)?
*如果访问后出现类似构建错误的屏幕,请尝试以下操作。
1 2 | $ docker-compose run --rm app npm run build $ docker-compose run --rm yarn install |
步骤5,让我们更改标题
修复了
的第43行附近的以下内容
1 2 | - <h1 class="cover-heading"><i class="fa fa-file-text"></i> CodiMD</h1> + <h1 class="cover-heading"><i class="fa fa-file-text"></i> k-waragaiMD</h1> |
这个('?`∩)↑年龄↑
的动机
Step6。让我们启用Github登录
转到
?? https://github.com/settings/developers并单击
输入所需的信息,然后单击
吐出
一次执行
编辑
docker-env。
docker环境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ... # Change Require CMD_DB_URL=mysql://hackmd:hackmdpass@database:3306/hackmd # Githubログイン使いたいなら - # CMD_GITHUB_CLIENTID={YOUR_GITHUB_CLIENT_ID} - # CMD_GITHUB_CLIENTSECRET={YOUR_GITHUB_SECRET_KEY} + CMD_GITHUB_CLIENTID=SampeClientIdDesu + CMD_GITHUB_CLIENTSECRET=SampeSecretKeyDesu # option: Docker Environment # MYSQL_USER= # MYSQL_PASSWORD= # MYSQL_DATABASE= # MYSQL_ROOT_PASSWORD= # APP_USE_PORT= |
编辑完成后,执行
现在将出现以前不存在的
如果您尝试登录,则可以登录,因为您可以从Github获取用户名等。
让我们在EC2(主机)
上运行它
我想大致在不使用docker的情况下在Ubuntu上构建它。
我认为有一些基本的安全设置等,因此我将省略它们。
我说的是您已经使用EC2的状态。
步骤1.准备工作
- apt更新升级
EC2实例[ubuntu用户]
1 2 | $ sudo apt update $ sudo apt upgrade |
Step2。创建用户并添加sudo组
EC2实例[ubuntu用户]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # ユーザーの作成 $ sudo adduser hackmd Adding user `hackmd' ... Adding new group `hackmd' (1001) ... Adding new user `hackmd' (1001) with group `hackmd' ... Creating home directory `/home/hackmd' ... Copying files from `/etc/skel' ... Enter new UNIX password: passwordを入力... Retype new UNIX password: passwordを入力... passwd: password updated successfully Changing the user information for hackmd Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: # sudo グループへ hackmd ユーザーを追加 $ sudo gpasswd -a hackmd sudo # スイッチッ!!!!!! $ sudo su - hackmd |
第三步:安装必需的软件包
- 安装似乎是核心的东西
EC2实例[hackmd用户]
1 | [hackmd]$ sudo apt-get install -y git build-essential wget vim unzip libssl-dev python |
- nvm安装
EC2实例[hackmd用户]
1 2 3 4 5 6 7 | [hackmd]$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.0/install.sh | bash [hackmd]$ export NVM_DIR="$HOME/.nvm" [hackmd]$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [hackmd]$ [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" [hackmd]$ source ~/.bashrc [hackmd]$ nvm --version 0.35.0 |
- 安装节点
EC2实例[hackmd用户]
1 2 3 4 | [hackmd]$ nvm install v11.14.0 [hackmd]$ nvm use v11.14.0 [hackmd]$ node -v 11.14.0 |
- 纱线安装
EC2实例[hackmd用户]
1 2 3 4 5 6 7 | [hackmd]$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - [hackmd]$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list [hackmd]$ sudo apt-get update && sudo apt-get -y install yarn [hackmd]$ export PATH="$PATH:/opt/yarn-1.15.2/bin" [hackmd]$ source ~/.bashrc [hackmd]$ yarn -v 1.15.2 |
- mariaDB安装(MySQL很好)
EC2实例[hackmd用户]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | [hackmd]$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash [hackmd]$ sudo apt -y update [hackmd]$ apt install -y mariadb-server-10.3 [hackmd]$ mysql_secure_installation Enter current password for root (enter for none): > パスワード Change the root password? [Y/n] > Y > New password: パスワード > Re-enter new password: パスワード Remove anonymous users? [Y/n] > n Disallow root login remotely? [Y/n] > Y Remove test database and access to it? [Y/n] > Y Reload privilege tables now? [Y/n] > Y [hackmd]$ mysql -uroot -p -h 127.0.0.1 -e "show databases;" > ルートパスワード +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ # ユーザー作成 [hackmd]$ mysql -uroot -p -h 127.0.0.1 -e "CREATE USER ユーザー名 IDENTIFIED BY 'パスワード';" # 権限付与 [hackmd]$ mysql -uroot -p -h 127.0.0.1 -e "GRANT ALL ON *.* TO 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';" # 適用 [hackmd]$ mysql -uroot -p -h 127.0.0.1 -e "FLUSH PRIVILEGES;" [hackmd]$ mysql -uユーザー名 -p -h 127.0.0.1 -e "create database データベース名;" |
- Nginx的
EC2实例[hackmd用户]
1 2 3 4 5 | [hackmd]$ curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add - [hackmd]$ VCNAME=`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2` && sudo -E sh -c "echo "deb http://nginx.org/packages/ubuntu/ $VCNAME nginx" >> /etc/apt/sources.list" [hackmd]$ VCNAME=`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2` && sudo -E sh -c "echo "deb-src http://nginx.org/packages/ubuntu/ $VCNAME nginx" >> /etc/apt/sources.list" [hackmd]$ sudo apt-get update [hackmd]$ sudo apt-get install -y nginx |
Step4。储存库克隆和配置
诸如
github上的
另外,config.json和sequelizerc与本地时几乎相同,因此您可以跳过它们。
但是,由于SSL,环境变量等已略有增加。
EC2实例[hackmd用户]
1 2 3 4 | [hackmd]$ git clone https://github.com/hackmdio/codimd.git [hackmd]$ cd codimd [hackmd]$ cp .sequelizerc.example .sequelizerc [hackmd]$ cp config.json.example config.json |
- utf8mb4.cnf的设置
EC2实例[hackmd用户]
1 | [hackmd]$ sudo vim /etc/mysql/mariadb.conf.d/utf8mb4.cnf |
/etc/mysql/mariadb.conf.d/utf8mb4.cnf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # MariaDB-specific config file. # Read by /etc/mysql/my.cnf [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] collation-server=utf8mb4_general_ci init-connect='SET NAMES utf8mb4' character-set-server=utf8mb4 # Import all .cnf files from configuration directory !includedir /etc/mysql/mariadb.conf.d/ |
-
config.json设置
-
将图像上传到S3
-
登录名禁止电子邮件注册,只有Github登录名
-
来宾用户无法编写和浏览
-
指定域
我们将以
的形式创建一个配置。
SSL在此阶段尚未完成,但稍后会完成。
Github
EC2实例[hackmd用户]
1 | [hackmd]$ vim config.json |
config.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | { "production": { "loglevel": "info", "useSSL": false, "protocolUseSSL": false, "domain": "xxxxxxxxxxx.com", #--ドメインがあるのであれば "urlAddPort": "80", "allowAnonymousEdits": false, "defaultPermission": "private", "allowEmailRegister": false, "email": false, "allowGravatar": true, "db": { "username": "xxxxxxxxxxx", "password": "xxxxxxxxxxx", "database": "xxxxxxxxxxx", "host": "127.0.0.1", "port": "3306", "dialect": "mysql" }, "github": { "clientID": "xxxxxxxxxxxxxxxxxxxxxx", "clientSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "imageuploadtype": "s3", "s3": { "accessKeyId": "xxxxxxxxxxxxxxxxxxxxxx", "secretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "region": "ap-northeast-1" }, "s3bucket": "codimd-production" } } |
- Nginx设置
EC2实例[hackmd用户]
1 | [hackmd]$ sudo vim /etc/nginx/conf.d/node-app.conf |
/etc/nginx/conf.d/node-app.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | server { listen 80; # listen 443 ssl; ssl on; # 編集すること server_name {YOUR_DOMAIN}.com; # 今はまだ使わない # ssl_certificate /etc/letsencrypt/live/{YOUR_DOMAIN}.com/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/{YOUR_DOMAIN}.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass https://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; } # あとで SSL取得に使う location ^~ /.well-known/acme-challenge/ { default_type "text/plain"; root /home/hackmd/codimd/public; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /home/hackmd/codimd/public; } } |
EC2实例[hackmd用户]
1 | [hackmd]$ sudo systemctl restart nginx |
- 如果是自由帧,则RAM受到限制,因此请创建一个SWAP区域
EC2实例[hackmd用户]
1 2 3 4 | [hackmd]$ sudo dd if=/dev/zero of=/swap bs=1M count=1024 [hackmd]$ sudo mkswap /swap [hackmd]$ sudo swapon /swap [hackmd]$ sudo chmod 600 /swap |
步骤5.启动
EC2实例[hackmd用户]
1 2 3 4 5 | [hackmd:~/codimd]$ yarn install [hackmd:~/codimd]$ yarn global add webpack [hackmd:~/codimd]$ npm run build [hackmd:~/codimd]$ node_modules/.bin/sequelize db:migrate [hackmd:~/codimd]$ node app.js |
步骤6.永久启动应用程序
EC2实例[hackmd用户]
1 2 | [hackmd:~/codimd]$ npm install -g forever [hackmd:~/codimd]$ forever start app.js |
Step7。SSL(HTTPS)
这次我们将使用
- certbot挑战
EC2实例[hackmd用户]
1 2 3 4 5 | [hackmd:~/codimd]$ mkdir -p .well-known/acme-challenge/ [hackmd:~/codimd]$ chmod 644 .well-known/acme-challenge/ [hackmd:~/codimd]$ cd ~/ [hackmd:~/]$ git clone https://github.com/certbot/certbot.git && cd certbot [hackmd:~/]$ sudo ./certbot-auto certonly --webroot -w /home/hackmd/codimd/public -d {YOUR_DOMAIN}.com -m {YOUR_MAIL_ADDR} --debug |
- 应用程序侧的对应
EC2实例[hackmd用户]
1 | [hackmd:~/]$ cd codimd |
- 更改环境变量
EC2实例[hackmd用户]
1 | [hackmd:~/codimd]$ direnv edit . |
.ervrc
1 2 | - export CMD_PROTOCOL_USESSL=false + export CMD_PROTOCOL_USESSL=true |
- 修改config.json
EC2实例[hackmd用户]
1 | [hackmd:~/codimd]$ vim config.json |
config.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | { "production": { "loglevel": "info", - "useSSL": false, - "protocolUseSSL": false, + "useSSL": true, + "protocolUseSSL": true, + "sslKeyPath": "/etc/letsencrypt/live/xxxxxxxxxxx.com/privkey.pem", + "sslCertPath": "/etc/letsencrypt/live/xxxxxxxxxxx.com/cert.pem", + "dhParamPath": "/etc/letsencrypt/live/xxxxxxxxxxx.com/fullchain.pem", + "sslCAPath": ["/etc/letsencrypt/live/xxxxxxxxxxx.com/chain.pem"], "domain": "xxxxxxxxxxx.com", #--ドメインがあるのであれば "urlAddPort": "80", "allowAnonymousEdits": false, "defaultPermission": "private", "allowEmailRegister": false, "email": false, "allowGravatar": true, "db": { "username": "xxxxxxxxxxx", "password": "xxxxxxxxxxx", "database": "xxxxxxxxxxx", "host": "127.0.0.1", "port": "3306", "dialect": "mysql" }, "github": { "clientID": "xxxxxxxxxxxxxxxxxxxxxx", "clientSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "imageuploadtype": "s3", "s3": { "accessKeyId": "xxxxxxxxxxxxxxxxxxxxxx", "secretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "region": "ap-northeast-1" }, "s3bucket": "codimd-production" } } |
- Nginx的变化
EC2实例[hackmd用户]
1 | [hackmd:~/codimd]$ sudo vim /etc/nginx/conf.d/node-app.conf |
/etc/nginx/conf.d/node-app.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | upstream node-app { server localhost:3000; } server { listen 443 ssl; ssl on; server_name xxxxxxxxxxxx.com; ssl_certificate /etc/letsencrypt/live/xxxxxxxxxxx.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/xxxxxxxxxxx.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://node-app/; } location ^~ /.well-known/acme-challenge/ { default_type "text/plain"; root /home/hackmd/codimd/public; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /home/hackmd/codimd/public; } } |
EC2实例[hackmd用户]
1 | [hackmd:~/codimd]$ sudo systemctl restart nginx |
步骤8.重新启动
EC2实例[hackmd用户]
1 | [hackmd:~/codimd]$ forever app.js restart |
访问!
对于
Github
我可以获取密钥并登录吗? \\ Sai&Co /
故障排除
-
尝试类似
chmod 644 .well-known/acme-challenge/ 的操作。 -
同样,在挑战时,您应该可以通过80号(HTTP)进行访问,因此在更新时不要忘记将其设置为
listen 80 。
我试图使其能够自动将团队使用的董事会发布到Qiita团队
我们的团队占用一个董事会,并且每天都在不断更新。
板上写的内容如下。
-
共同事项
- 带薪天数,弹性工作日等
-
今天的目标
- 明确今天要完成的任务
-
工作日志
- 工作时,每个人都用h2剪切标题并总结日志等。
直到现在,我都将所有这些内容复制到第二天的Qiita团队,但是
好吧,是工程师的灵魂想要自动化甚至一点重复(?Ω?*)这很烦人 del>
这很容易做到,只需在每个工作日22:00左右使用Cron中的Qiita API运行脚本即可。
我将放置示例代码。
post_daily_report_by_cosmos_team.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | require 'net/https' require 'mysql2' require "json" require "date" mysql_username = ENV['MYSQL_USERNAME'].freeze mysql_password = ENV['MYSQL_PASSWORD'].freeze mysql_database = ENV['MYSQL_DATABASE'].freeze team_note_id = ENV['TEAM_NOTE_ID'].freeze qiita_api_key = ENV['QIITA_API_KEY'].freeze domain = ENV['TEAM_DOMAIN'].freeze client = Mysql2::Client.new( socket: '/var/run/mysqld/mysqld.sock', username: mysql_username, password: mysql_password, encoding: 'utf8', database: mysql_database ) statement = client.prepare('SELECT content FROM Notes WHERE id = ?') # 事前にタイトルで select しておき ID を控えています。 # example: # mysql -uhackmd -p hackmd -e "select id from Notes where title = 'cosmos開発日報'" results = statement.execute(team_note_id) weekday = ["日", "月", "火", "水", "木", "金", "土"] today = Date.today title = "cosmos開発日報" + today.strftime("%Y/%m/%d (#{weekday[today.wday]})") content = "" results.each do |row| content = row["content"] end # 組み立て qiita = "https://#{domain}.qiita.com/" path = '/api/v2/items' url = qiita + path uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE req = Net::HTTP::Post.new(uri.request_uri) req["Authorization"] = "Bearer #{qiita_api_key}" req["Content-Type"] = "application/json" post_data = { title: title, body: content, coediting: true, group_url_name: "cosmos", private: false, tags: [{name: "cosmos"},{name: "日報"}], tweet: false, }.to_json # 投稿 req.body = post_data # 結果 res = http.request(req) puts res.code, res.msg |
crontab
1 2 | # Edit this file to introduce tasks to be run by cron. 00 13 * * 1-5 bash -cl 'cd /home/hackmd/cron_scripts/ && ruby -Ku post_daily_report_by_cosmos_team.rb' |
现在每天都这样张贴! \\私人标签/
这样,您可以添加自己喜欢的功能并将其用作实验站点!
终于
这次,我介绍了两种方法,一种是使用docker构建,另一种是直接在主机上构建!
如果应用它,则可以使其成为ECS(?Ω?*)
作为工程师,我经常想到:"如果该服务具有此功能,那就太好了……"。
我认为能够修改最初使用的HackMD很棒。幸福
我提到HackMD具有企业版,但是在企业版中,它经常变为504,并等待自动恢复。 del>
有时它会连续发生,有时却不会发生,事实是我们因为不稳定状态持续而提升了内部部署。 del>
实际尝试时,并不难,您可以轻松扩展功能并播放一段时间(?Ω?*)
费用还使用EC2实例的免费套餐(t2.micro),但到目前为止,活动用户数从未降至15左右。
由于图像也提供给S3,因此可以舒适地使用它而不会引起容量压力!
由于只有
个字符,因此mysql本身的负担很小,因此该公司的大约50个人使用的免费框架似乎没有问题。
请尝试使用CodiMD(?Ω?*)再见
?? hackmdio / codimd:CodiMD-所有平台上的实时协作降价注释。
还有更好的工具!请告诉我!
我也做Twitter,所以请关注我。
?鹎褂鉓ayo(@mayoxtuna)/ Twitter
寻找朋友与Apex Legends(PC版)发展兴趣吗?(?'Ω'?)?
下次通知
明天是平安夜?(?'Ω'?)???:.。 。:愿您的圣诞节愿望成真:.. 。:??
12月24日是众筹工程师@cesare的"支持多项工作的技术"!
期待吗?再见
2019/12/24附录
在发布本文之后,我通过Twitter从HackMD的首席执行官那里获得了直接的感谢DM。
因此,有人告诉我有关成为504企业版的问题。
目前,它仍在高性能下运行,据说不会出现这些问题(?Ω?*)
不断发展的HackMD是最好的(?'?'?)?