三蔵開発メモ

Web開発やインフラ関連のメモを共有します

python3.7でvenvでの開発環境を作る

python3.7の開発環境をvenvで作る

概要

pythonの仮想環境を作るやり方は沢山あるが、公式チュートリアルにあるやり方をベースにした。
python3.7をインストールして、venvで実行できるようにする。

  • python3.7
  • venv
  • macOS 10.14
  • homebrew

python3.7インストール

brew update
brew install python3
python3 -v
(3.7.3がインストールされていることが確認できる。ctrl+Dで抜ける)

venv環境のフォルダを作る

test-envという名前のvenv環境を作る

mkdir test-env
cd test-env
python3 -m venv test-env

ターミナルでvenv環境に入る

上記までの作業をやると、test-envフォルダに色々とファイルが作られるので、以下のコマンドを実行する

source test-env/bin/activate

すると、ターミナルが、

(test-env) $ 

上記みたいになるので、この状態でpipインストールや、python3コマンドでスクリプトなどを実行すると、test-envのみで有効になる。
その場合、test-envフォルダ内でやらなくてはいけないということはなく、別途フォルダを作ってそこで実行したりしても良い。

Go 1.12 のローカル環境構築、Modulesを使えるようになるまで(MacOS版)

概要

  • mac OS 10.14
  • Homebrewインストール済み

Homebrewでgoをインストール

brew update
brew install go
go version
(go version go1.12.4 darwin/amd64)

goenvもいれる

brew install goenv
vi ~/.bash_profile

bash_profileに以下を追加

export PATH="$HOME/.goenv/bin:$PATH"
eval "$(goenv init -)"

詳しい使い方はここを参考にしました。

qiita.com

バージョンをbrewで入れたものに戻したい場合は、

goenv global system

と入れる。

GOPATH設定

bash_profileに以下を追加

export GOPATH=$HOME/go

この場合は、ホームフォルダ直下にgoというフォルダを作って、その下がGOPATHになる。
必要に応じて好きな場所に変えても問題ないです。

modulesを使う

go1.12だとデフォルトでmodulesが使えるようになっている。

適当な場所でフォルダを作り、その中で、

go init

すると、go.modフォルダが作られる。 あとはimport文に適当なライブラリを書いて、

go build

すると自動で持ってきてくれる。go getしてもOK。

具体例

たとえば、

github.com

上記のライブラリを使いたいとき、以下のようなソースコードをmain.goに書くとする。

package main

import (
    "fmt"
    "github.com/julienschmidt/httprouter" // これが使いたいgo getも特にしていないライブラリ 
    "net/http"
    "log"
)

func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
    fmt.Fprint(w, "Welcome!\n")
}

func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
    fmt.Fprintf(w, "hello, %s!\n", ps.ByName("name"))
}

func main() {
    router := httprouter.New()
    router.GET("/", Index)
    router.GET("/hello/:name", Hello)

    log.Fatal(http.ListenAndServe(":8080", router))
}

そして、以下を実行すると自動で上記ライブラリを持ってきてくれる。

go build main.go

※go.modファイルには上記ライブラリが追加されている。

Goにおけるフォルダ(パッケージ)分け

Go言語の勉強を始めたので、基本のメモ。

環境

Go 1.12

フォルダ分け

Goはmain関数があるmainパッケージが処理の拠点として存在するが、 処理を切り分けたい場合はパッケージを作る。 以下の内容が書かれた、「main.go」というファイルがあるとする

package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello world")
}

これをあえて以下のように切り分けたい場合

/prj
┣ main.go
┗ /print/print.go

print.goは以下のようにする

package print

import (
   "fmt"
)

func PrintHello(){
     fmt.Println("hello world")
}

main.goは以下のように書き換える

package main

import (
    "print"
)

func main() {
    print.PrintHello()
}

こちらのmain.goを実行すると最初に書いたmain.goと同じ動きをする。
fmtはprint側で呼び出して使っているため、importの必要がなくなる。
また、printとpackageに指定したprint.goを呼び出すときは、
importを使って呼び出す。
そうすると、「PrintHello」のように最初が大文字で設定してある関数はパブリックなため、
「パッケージ名.関数名」で呼び出すことができる。

その他

import(
   . "print"
)

上記のように「.」をimportするパッケージ前につけると、print.PrintHello()みたいにパッケージ名を前につけないで呼び出すこともできる。 「.」の代わりに「pri」とかつけてパッケージ名を指定のものに変えることもできる。

ネストしてるパッケージ

/prj
┣ main.go
┗ /print/printutil/print.go

上記のような階層にした場合は、

import (
"print/printutil"
)
main(){
  printutil.PrintHello()
}

上記のように呼び出す、print.goのパッケージ名はこの場合は「printutil」とする。

CentOS7とapache2.4で/tmp直下にファイル等を保存したりしたい時

privateTmp機能をoffにする
※セキュリティが下がるのでなるべく注意

/lib/systemd/system/httpd.service
---
PrivateTmp=true
↓
PrivateTmp=false
---
systemctl daemon-reload
systemctl restart httpd

apache2.4でのpreforkのチューニング

apache2.2ではhttpd.confに設定する部分があったが、 2.4では場所が変わっていたためメモ。

sudo vi /etc/httpd/conf.modules.d/00-mpm.conf
-------------------------------------------------------------------------------------------
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so

#以下を追記
<IfModule mpm_prefork_module>
    StartServers 10
    MinSpareServers 10
    MaxSpareServers 10
    ServerLimit 10
    MaxClients 10
    MaxRequestsPerChild 50
</IfModule>
----------------------------------------------------------------------------------

上記設定値はawsのt2.microでwordpressを動かすときの設定。

QiitaにCentOS7 Laravel5.5 PHP7 mariadb 環境を構築する手順を書きました

主に開発環境等でLaravelを構築するための手順をqiitaに書きました。
上から順に追っていけば環境が構築できるように書いてあります。

qiita.com

MongoDBでレプリカセットを今のデータを保持したまま解除する方法

MongoDBのレプリカセットを解除しようとしたとき、
データを保持したまま解除する方法が分からなくはまった時のメモ。

localデータベースを削除

ホスト機で以下コマンドを実行

mongo
>use local
>db.dropDatabase()

confファイル変更 mongodb ver.2系の場合

vi /etc/mongod.conf
----------
# in replicated mongo databases, specify the replica set name here
replSet=replSetname
----------
↓
----------
# in replicated mongo databases, specify the replica set name here
#replSet=replSetname
----------

confファイル変更 mongodb ver.3系の場合

vi /etc/mongod.conf
----------
replication:
  oplogSizeMB: 1024
  replSetName: 'replSetName'
----------
↓
----------
#replication:
#  oplogSizeMB: 1024
#  replSetName: 'replSetName'
----------

mongoを再起動

service mongod restart