「circleciについて」

ドキュメント

Welcome to CircleCI Documentation

「CircleCI」について

build,test,deploymentなどを自動化しスケーラブルにするマネージドサービス  
継続的インテグレーション 

「CircleCI Local CLI」

circleciのパワフルな機能を使えるcli
Using the CircleCI Local CLI

「Orbs」について

CircleCI の commands や jobs, executors をパッケージとして使い回すことのできる仕組み
サードパッケージ製のものもあり誰でも公開することができるみたい
Orbs Introduction
CircleCI Orbs 入門

設定

プロジェクトルートに「.circleci/config.yml」を設置して、実行するjobの詳細を記述する

連携

ソースリポジトリでは「github」と「bitbuket」が対応している
あと、通知用に「slack」等のサービスを使えるみたい
githubのリポジトリは自動で読み込まれプロジェクトとして登録すると、githubに登録するとプロジェクトルートに設置する「.circleci/config.yml」に設定した内容にしたがって、jobが走る

Laravel環境をlaradockで作る

laradockとは

PHPやその他のミドルウェアコンテナイメージ一式をつめた開発環境である。
設定をちょいちょい変えるだけで簡単にコンテナをたてられる。
Laradock

準備

1
2
3
4
$ mkdir ikasumi-project
$ cd ikasumi-project
$ git clone https://github.com/laradock/laradock.git
$ cd laradock

設定ファイル用意修正

1
2
$ cp env-example .env
$ vi .env

設定ファイルの修正箇所(diff)

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
94c94
< WORKSPACE_INSTALL_XDEBUG=true
---

> WORKSPACE_INSTALL_XDEBUG=false
144c144
< PHP_FPM_INSTALL_XDEBUG=true
---

> PHP_FPM_INSTALL_XDEBUG=false
177c177
< NGINX_HOST_HTTP_PORT=8080

---
> NGINX_HOST_HTTP_PORT=80
198,201c198,201
< MYSQL_VERSION=5.7

< MYSQL_DATABASE=ikasumi_db
< MYSQL_USER=ikasumi
< MYSQL_PASSWORD=ikasumi_psw
---
> MYSQL_VERSION=latest

> MYSQL_DATABASE=default
> MYSQL_USER=default

> MYSQL_PASSWORD=secret
203c203
< MYSQL_ROOT_PASSWORD=root_psw

---
> MYSQL_ROOT_PASSWORD=root

起動、そしてlaravelアプリの設置

1
2
3
4
5
6
7
8
9
$ docker-compose up -d nginx mysql redis
確認
$ docker-compose ps
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:8080->80/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp

laravel設置

1
2
3
$ docker exec -it laradock_workspace_1 bash
$ composer create-project laravel/laravel=5.7 ikasumi
$ exit

nginxのdocument rootを変更する
laradock配下にあるnginx/sitesへ移動

1
2
$ cd nginx/sites
$ vi default.conf

変更箇所のdiff

1
2
3
4
13c13
< root /var/www/ikasumi/public;
---

> root /var/www/public;

変更したらlaradock再起動

1
$docker-compose restart

http://0.0.0.0:8080/にアクセスしてlaravelが表示されたらひとまずOK

DBへの接続確認

laravelのDBの接続設定のためikasumi/.envの修正
※USERNAME=ikasumiだと失敗したので、rootにしている

1
2
3
4
5
6
7
8
9
10
11
< DB_HOST=mysql
---

> DB_HOST=127.0.0.1
12,14c12,14
< DB_DATABASE=ikasumi_db
< DB_USERNAME=root

< DB_PASSWORD=root_psw
---

> DB_DATABASE=homestead
> DB_USERNAME=homestead

> DB_PASSWORD=secret

workspaceへ入ってmigrationコマンドが成功したらDBはOK

1
2
$ docker exec -it laradock_workspace_1 bash
$ php artisan migrate

「SQLAlchemy」を試してみる

usage

下記のような感じ

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
from sqlalchemy import Column, ForeignKey, Integer, String, Text, TIMESTAMP
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

Base = declarative_base()


engine = create_engine('postgresql://user_name:password@localhost:5432/db_name')
Session = sessionmaker(bind=engine)

class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
status = Column(Integer)
profile = Column(Text)
created_at = Column(TIMESTAMP)


Base.metadata.create_all(engine)

session = Session()

# 全件取得
result = session.query(Users).all() # .all() は省略可
for user in result:
print(user.id, user.status, user.profile, user.created_at)

たまに役に立つSQL(PostgreSQL)

データを倍々に増やしていくsql

idがautoincrementであることが前提

1
2
3
4
5
6
7
8
9
10
11
INSERT INTO messages_test
(
column_name_1,
column_name_2
)
SELECT
column_name_1,
column_name_2
FROM
table
;

下記のようにすればランダムデータも入れれる  

1
2
3
4
5
6
7
8
9
10
11
INSERT INTO messages_test
(
column_name_1,
column_name_2
)
SELECT
(random() * 10000)::int % 100,
column_name_2
FROM
table
;

「cheat.sh」について

cheat.shはコミュニティドリブンのドキュメントを手軽に参照するためのツール(HTTPインターフェース)。
ブラウザでアクセスするかもしくはcurlコマンドでアクセスすることができる。
pythonについて学習したい場合は次のURLを叩くか。
https://cheat.sh/python/:learn

もしくはcurlで取得する

1
curl cheat.sh/python/:learn

参考

chubin/cheat.sh
cheat.sh公式

Python/Djangoのmeethubを試してみる

meethubとは

GithubにあがっいるPython/Django製のオープンソースのイベントマネジメントシステム
iyanuashiri/meethub

installation

1
2
3
4
$ git clone
$ git clone git@github.com:iyanuashiri/meethub.git
$ cd meethub
$ pip install -r requirements.txt

足りないモジュールがあったので入れた。

1
2
$ python -m pip install djangorestframework
$ python -m pip install django-nose

settings.py

1
2
3
4
5
6
7
8
9
10
11
12
#env = environ.Env(DEBUG=(bool, False),)
env = environ.Env(DEBUG=(bool, True),)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'meethub',
'USER': 'root',
'PASSWORD': '****',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
}
}

.env ファイルを作成
CLOUD_NAME以下の設定はcloudinaryのアカウントを作成してから設定する

1
DEBUG=True
# DJANGO_SETTINGS_MODULE=myapp.settings.dev
SECRET_KEY=your-secret-key

CLOUD_NAME=***
API_KEY=***
API_SECRET=***

migrationを実行
migrationファイルはすでにできているのでpython manage.py makemigrationsは実行しなくて大丈夫 (No changes detectedがでる)

1
$ python manage.py migrate

migration成功したらevents_categoryテーブルにマスターデータを用意しておこう。
※イベント登録する際にカテゴリー選択は必須なので。
※管理画面から登録しても良い

1
INSERT INTO events_category(name, description)VALUES('test', 'test-hoge-moge');

サーバー起動

1
python manage.py runserver 9000

centos7の環境でpuppeteerをインストールしてPDFを出力する

nodejsとpuppeteerインストール

公式のインストール方法があるみたい
node.js 8.x をyumでインストールする
https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora

node.js10はまだLTS(LongTermSupport)じゃないのでやめとく。
2018/10からLTSとなるようだ。

インストールはroot権限で実行する。

1
2
3
$ sudo su -
# curl -sL https://rpm.nodesource.com/setup_8.x | sudo bash -
# yum install -y nodejs gcc-c++ make

下記はpuppeteerの方で必要になるツール

1
2
$ sudo su -
# yum -y install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc

puppeteerのインストール
※内部的にHeadlessChromeが使われるがChromiumも一緒にインストールされるので別途chromeをinstallする必要はない

1
npm i puppeteer

output-pdf.jsを作成

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
const puppeteer = require('puppeteer');

(async () => {
const browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox'],
});
const page = await browser.newPage();
await page.goto('https://github.com/trending', {waitUntil: 'networkidle2'});

var file_name = 'default';

if (process.argv[2]) {
file_name = process.argv[2];
}

await page.pdf(
{
path: file_name + '.pdf',
width: '1680px',
printBackground :true,
}
);

await browser.close();
})();

下記のコマンドでgithub-trend.pdfが作成されれば成功

1
$ node index.js github-trend

Apache(php)からpuppeteerを実行するには?

Error executing Puppeteer from PHP
Can’t execute Puppeteer with user “apache” (CentOS 7)

上記などでも報告されているとおり、puppeteernpm i puppeteerによって最初からハンドルされているchromeを使用する場合はWebアクセスをトリガーにphpからpuppeteerを実行することはできない。

node_modules/puppeteer/.local-chromium/のpermissionを変更する方法もありますが、chromiumをOSにインストールする方が正攻法な気がする。

  1. 下記でchromiumをインストールする

    1
    $ sudo yum install chromium
  2. インストールしたchromiumを指定するようにソースを編集する

実行パス(executablePath)をインストールしたchromiumに変更する

1
2
3
4
const browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox'],
executablePath: '/bin/chromium-browser',
})
;

golang-migrate/migrateの使い方

installation of centos

パスの通ったディレクトリに移動

1
$ cd ~/bin

ダウンロードと解凍。
そして実行ファイルを作成。
Linux(centos)の場合

1
2
3
4
5
6
-- pathの通ったディレクトリに移動(~/bin とかでもよい)
$ cd /usr/local/bin
$ curl -L https://github.com/golang-migrate/migrate/releases/download/v3.2.0/migrate.linux-amd64.tar.gz | tar xvz
$ mv migrate.linux-amd64 migrate
$ migrate --version
3.2.0

macの場合

1
2
3
4
-- pathの通ったディレクトリに移動(~/bin とかでもよい)
$ cd /usr/local/bin
$ curl -L https://github.com/golang-migrate/migrate/releases/download/v3.2.0/migrate.darwin-amd64.tar.gz | tar xvz
$ mv migrate.darwin-amd64 migrate

バージョンの確認は以下のページから。
golang-migrate/migrate

usage

オプションをつけてmigrationファイルを作成した例1

1
$ migrate create -ext sql -dir dir_name alter_table_t_user

オプションをつけてmigrationファイルを作成した例2

1
$ migrate create -ext sql alter_table_t_user

migrationを実行

1
migrate -database 'postgres://user_name:vagrant@localhost:5432/db_name?sslmode=disable' -path ./ up

対話的にディレクトリを移動するコマンドを作成する

スクリプト

パスの通ったディレクトリに下記のソースを配置する

to_script

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
#! /bin/sh
#usage: $ . repo
alias ssh="sshrc"
show_mainmenu()
{
while true; do
cat <<EOF
menu
1:開発環境(/path/to)
99:exit
移動するディレクトリのNo.を入力してください。
EOF
read ACT_MAIN
case ${ACT_MAIN} in
1)
echo '*****************'
echo '開発環境(/path/to)'
echo '*****************'
cd /path/to
break
;;
99)
echo '*****************'
echo 'exit'
echo '*****************'
break
;;
*)
printf "error : invalid key"
;;
esac
done
}
show_mainmenu

実行権限を与えておくこと
上記のスクリプトを実行するたけでは現在のディレクトリは変更されない

alias を設定する

.bashrc を編集

1
2
3
alias to='. to_script'
# もしくは
alias to='source to_script'

.bashrcの設定を有効化しておくこと

1
$ source .bashrc

実行

設定したら下記のコマンドによって移動したいディレクトリを選択しよう

1
$ to