All Projects → ryuzee → Slidehub

ryuzee / Slidehub

SlideHub is an Open Source Slide Sharing Application for Azure / AWS

Programming Languages

ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to Slidehub

Manageiq
ManageIQ Open-Source Management Platform
Stars: ✭ 1,089 (+807.5%)
Mutual labels:  aws, azure, rails
Kittik
Create slides in TypeScript and present them in the terminal using ASCII only!
Stars: ✭ 147 (+22.5%)
Mutual labels:  slides, deck, slide
Cppcon2015
Repository for the slides and the code of my CppCon 2015 talks.
Stars: ✭ 77 (-35.83%)
Mutual labels:  slides, slide
Pragmaticai
[Book-2019] Pragmatic AI: An Introduction to Cloud-based Machine Learning
Stars: ✭ 79 (-34.17%)
Mutual labels:  aws, azure
Cloudsploit
Cloud Security Posture Management (CSPM)
Stars: ✭ 1,338 (+1015%)
Mutual labels:  aws, azure
Terraform Provider Databricks
Databricks Terraform Provider
Stars: ✭ 119 (-0.83%)
Mutual labels:  aws, azure
Terrastack
This project is archived, but the idea of Terrastack lives on in the Terraform CDK. - https://github.com/hashicorp/terraform-cdk
Stars: ✭ 71 (-40.83%)
Mutual labels:  aws, azure
Cloudquery
cloudquery transforms your cloud infrastructure into SQL or Graph database for easy monitoring, governance and security.
Stars: ✭ 1,300 (+983.33%)
Mutual labels:  aws, azure
Pulumi
Pulumi - Developer-First Infrastructure as Code. Your Cloud, Your Language, Your Way 🚀
Stars: ✭ 10,887 (+8972.5%)
Mutual labels:  aws, azure
Typhoon
Minimal and free Kubernetes distribution with Terraform
Stars: ✭ 1,397 (+1064.17%)
Mutual labels:  aws, azure
Foundatio
Pluggable foundation blocks for building distributed apps.
Stars: ✭ 1,365 (+1037.5%)
Mutual labels:  aws, azure
Hackingthe.cloud
Content for hackingthe.cloud
Stars: ✭ 101 (-15.83%)
Mutual labels:  aws, azure
Terraform Security Scan
Run a security scan on your terraform with the very nice https://github.com/liamg/tfsec
Stars: ✭ 64 (-46.67%)
Mutual labels:  aws, azure
Ha Sap Terraform Deployments
Automated SAP/HA Deployments in Public/Private Clouds
Stars: ✭ 61 (-49.17%)
Mutual labels:  aws, azure
Pulumi Kubernetesx
Kubernetes for Everyone
Stars: ✭ 74 (-38.33%)
Mutual labels:  aws, azure
Cloud Portal
Self service web portal for different Cloud platforms like Azure, AWS and VMWare vSphere.
Stars: ✭ 60 (-50%)
Mutual labels:  aws, azure
Simpleupload
Simple upload system in PHP, compatible with AWS S3, Dropbox, Azure and others.
Stars: ✭ 85 (-29.17%)
Mutual labels:  aws, azure
Gocloud
☁️ Go API for open cloud
Stars: ✭ 112 (-6.67%)
Mutual labels:  aws, azure
Pega Helm Charts
Orchestrate a Pega Platform™ deployment by using Docker, Kubernetes, and Helm to take advantage of Pega Platform Cloud Choice flexibility.
Stars: ✭ 58 (-51.67%)
Mutual labels:  aws, azure
Learning Cloud
List of resources - courses, sample code, articles and screencasts for learning AWS, Azure, GCP and Alibaba Cloud
Stars: ✭ 100 (-16.67%)
Mutual labels:  aws, azure

SlideHub Circle CI Test Coverage

This is an open source slidesharing application with Azure / AWS.

If you like or use this project, please provide feedback to author - Star it ★

The previous version of SlideHub was made with CakePHP. And this version is a successor of the previous version and is made with Ruby on Rails 5.

Screenshot

You can see other screenshot here.

Notice

  • v1.7 Removing paperclip gem causes a tiny breaking change. You need to set your avatar icon again to show your avatar.

Features

  • Uploading slides (pptx, pdf)
  • Listing slides by category, user and so on
  • Showing slide without Flash Player
  • Showing slide vertically
  • Storing all slides in Azure Blob Storage or Amazon S3. Thus terribly scalabale
  • Searching slides
  • i18n
  • Responsive design
  • Embedded player
  • RSS
  • Statistics
  • Transcript
  • API
  • Admin Dashboard to overview statistics and edit slides

Requirements

This application depends on following technologies.

  • Docker (Azure Virtual Machine or Amazon EC2 is NOT required)
  • MySQL
  • AWS or Azure
  • AWS: Amazon S3 / Amazon SQS
  • Azure: Blob Storage / Blob Queue

Run the application on Azure Environment within 20 minutes

If you want to get the application running on Azure without manual efforts, See the instruction.

Preparing Infrastructure

AWS

  • Create two Amazon S3 buckets (cf. slidehub-slides, slidehub-images)
  • Set CORS policy for bucket that will store the slide decks as follows
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>HEAD</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
        <ExposeHeader>Access-Control-Allow-Origin</ExposeHeader>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
    </CORSRule>
</CORSConfiguration>
  • Create SQS queue (cf. slidehub-convert) and note the url.

Azure

  • Create two Azure Blob containers (cf. slidehub-slides, slidehub-images)
  • Set CORS policy for the container that will store the slide decks as follows
require 'azure'

Azure.config.storage_account_name = 'YOUR_AZURE_STORAGE_ACCOUNT_NAME'
Azure.config.storage_access_key = 'YOUR_AZURE_STORAGE_ACCESS_KEY'

blob_service = Azure::Blob::BlobService.new
props = Azure::Service::StorageServiceProperties.new

props.logging = nil
props.hour_metrics = nil
props.minute_metrics = nil

# Create a rule
rule = Azure::Service::CorsRule.new
rule.allowed_headers = ["*"]
rule.allowed_methods = ["PUT", "GET", "HEAD", "POST", "OPTIONS"]
rule.allowed_origins = ["*"]
rule.exposed_headers = ["*"]
rule.max_age_in_seconds = 1800

props.cors.cors_rules = [rule]
blob_service.set_service_properties(props)

puts blob_service.get_service_properties.inspect
  • Create Azure Blob Queue (cf. slidehub-convert) and note the name.

Prepare Database Server

SlideHub can use MySQL (including Azure Database for MySQL). There are several options to run a database server as follows.

  • Launch virtual machine and install database software by your own
  • Use Amazon Relational Database Services (RDS)
  • Use Azure Database for MySQL

You need to get these variables as follows.

  • Database URL
  • Database user name
  • Database password

And then, create database for the app. (Tables can be created by Rails migration)

Retrieve Docker Image

docker pull ryuzee/slidehub:latest

Run Application

The easiest way to run the app is to use Kubernetes, Amazon ECS(Elastic Container Service), Azure Web Apps on Linux or Azure Container Service. However, if you want to run app by docker command, see follows.

$CONTAINER_ID=/usr/bin/docker run -d \
  --env OSS_REGION=$OSS_REGION \
  --env OSS_SQS_URL=$OSS_SQS_URL \
  --env OSS_BUCKET_NAME=$OSS_BUCKET_NAME \
  --env OSS_IMAGE_BUCKET_NAME=$OSS_IMAGE_BUCKET_NAME \
  --env OSS_USE_S3_STATIC_HOSTING=$OSS_USE_S3_STATIC_HOSTING \
  --env OSS_AWS_SECRET_KEY=$OSS_AWS_SECRET_KEY \
  --env OSS_AWS_ACCESS_ID=$OSS_AWS_ACCESS_ID \
  --env OSS_USE_AZURE=$OSS_USE_AZURE \
  --env OSS_AZURE_CONTAINER_NAME=$OSS_AZURE_CONTAINER_NAME \
  --env OSS_AZURE_IMAGE_CONTAINER_NAME=$OSS_AZURE_IMAGE_CONTAINER_NAME \
  --env OSS_AZURE_CDN_BASE_URL=$OSS_AZURE_CDN_BASE_URL \
  --env OSS_AZURE_QUEUE_NAME=$OSS_AZURE_QUEUE_NAME \
  --env OSS_AZURE_STORAGE_ACCESS_KEY=$OSS_AZURE_STORAGE_ACCESS_KEY \
  --env OSS_AZURE_STORAGE_ACCOUNT_NAME=$OSS_AZURE_STORAGE_ACCOUNT_NAME \
  --env OSS_SECRET_KEY_BASE=$OSS_SECRET_KEY_BASE \
  --env OSS_DB_NAME=$OSS_DB_NAME \
  --env OSS_DB_USERNAME=$OSS_DB_USERNAME \
  --env OSS_DB_PASSWORD=$OSS_DB_PASSWORD \
  --env OSS_DB_URL=$OSS_DB_URL \
  --env OSS_DB_PORT=$OSS_DB_PORT \
  --env OSS_DB_ENGINE=$OSS_DB_ENGINE \
  --env OSS_DB_USE_AZURE=$OSS_DB_USE_AZURE \
  --env OSS_SMTP_SERVER=$OSS_SMTP_SERVER \
  --env OSS_SMTP_PORT=$OSS_SMTP_PORT \
  --env OSS_SMTP_USERNAME=$OSS_SMTP_USERNAME \
  --env OSS_SMTP_PASSWORD=$OSS_SMTP_PASSWORD \
  --env OSS_SMTP_AUTH_METHOD=$OSS_SMTP_AUTH_METHOD \
  --env OSS_PRODUCTION_HOST=$OSS_PRODUCTION_HOST \
  --env OSS_ROOT_URL=$OSS_ROOT_URL \
  --env RAILS_LOG_TO_STDOUT=1 \
-P --name slidehub ryuzee/slidehub:latest`

Then prepare database as follows.

`docker exec $CONTAINER_ID bash -l -c 'bundle exec rake db:create RAILS_ENV=production'`
`docker exec $CONTAINER_ID bash -l -c 'bundle exec rake db:migrate RAILS_ENV=production'`
`docker exec $CONTAINER_ID bash -l -c 'bundle exec rake db:seed RAILS_ENV=production'

Environmental Variables

The easiest way is to add these lines to docker-compose.yml when you are testing the app in your local environment. If you are trying to use the app for production, set these variables via any Docker platform.

Cloud Settings (Azure)

OSS_USE_AZURE=[0|1] # If you want to use Azure, set 1
OSS_AZURE_CONTAINER_NAME=[Original file container name]
OSS_AZURE_IMAGE_CONTAINER_NAME=[Image container name]
OSS_AZURE_CDN_BASE_URL=[Set value if you are using CDN]
OSS_AZURE_QUEUE_NAME=[BLOB queue name]
OSS_AZURE_STORAGE_ACCESS_KEY=[Azure Storage Access Key]
OSS_AZURE_STORAGE_ACCOUNT_NAME=[Azure Storage Accout Name]

Cloud Settings (AWS)

OSS_BUCKET_NAME=[Original file bucket name]
OSS_IMAGE_BUCKET_NAME=[Image bucket name]
OSS_USE_S3_STATIC_HOSTING=[1|0]
OSS_REGION=[ap-northeast-1]
OSS_CDN_BASE_URL=[Set value if you are using CDN]
OSS_SQS_URL=[SQS URL]
OSS_AWS_ACCESS_ID=[Your AWS Access Key if you run app out of AWS]
OSS_AWS_SECRET_KEY=[Your AWS Secret Key if you run app out of AWS]

General Settings

# Rails
RAILS_ENV=[production|development]
RAILS_LOG_TO_STDOUT=[1] # set the variable if you want the standard output

# Mandatory
OSS_SECRET_KEY_BASE=[Your Secret Key Base]

# Mail settings
OSS_SMTP_SERVER=[Your SMTP server]
OSS_SMTP_PORT=[587]
OSS_SMTP_USERNAME=[Your SMTP account]
OSS_SMTP_PASSWORD=[Your SMTP password]
OSS_SMTP_AUTH_METHOD=plain
OSS_FROM_EMAIL=[Email address that will be used sender]

OSS_PRODUCTION_HOST=[hoge.example.com]
OSS_ROOT_URL=[http://your_root_url]
OSS_LOGIN_REQUIRED=[1] # set the variable if you would like to force users login to view any pages

# For production (closely related to rails environment)
OSS_DB_NAME=[DB name for Prod] # Set openslideshare if using installer
OSS_DB_USERNAME=[DB Username for Prod] # Set root if using installer
OSS_DB_PASSWORD=[DB Password for Prod] # Set passw0rd if using installer
OSS_DB_URL=[DB URL for Prod] # Set localhost if using installer
OSS_DB_ENGINE=[DB Engine] # Default 'mysql2'. You can set 'mysql2' or 'sqlserver' (NOT 'mysql')
OSS_DB_PORT=[DB Port] # Default 3306
OSS_DB_USE_AZURE=[false|true] # If you are using Azure Database for MySQL, set true

# For development
OSS_DB_NAME_DEV=[DB name for Dev]
OSS_DB_USERNAME_DEV=[DB Username for Dev]
OSS_DB_PASSWORD_DEV=[DB Password for Dev]
OSS_DB_URL_DEV=[DB URL for Dev]
OSS_DB_ENGINE_DEV=[DB ENGINE for Dev]
OSS_DB_PORT_DEV=[DB PORT for Dev]
OSS_DB_USE_AZURE_DEV=[Use Azure Database for MySQL for Dev]

# For test
OSS_DB_NAME_TEST=[DB name for Test]
OSS_DB_USERNAME_TEST=[DB Username for Test]
OSS_DB_PASSWORD_TEST=[DB Password for Test]
OSS_DB_URL_TEST=[DB URL for Test]
OSS_DB_ENGINE_TEST=[DB ENGINE for Test]
OSS_DB_PORT_TEST=[DB PORT for Test]
OSS_DB_USE_AZURE_TEST=[Use Azure Database for MySQL for Test]

For Development mode

Requirements

  • Docker (>= 17.06)
  • docker-compose (>= 1.12.0)
  • Ruby environment including bundler
  • yarn

After cloning the repository, you have to run yarn command to retrieve libraries.

Build images and run the app for testing

You can use docker-compose for development. Try the commands as follows. Before running the command, please set several environmental variables in your computer. See docker-compose.yml

docker-compose build
docker-compose run app bash -l -c 'bundle exec rake db:create RAILS_ENV=development'
docker-compose run app bash -l -c 'bundle exec rake db:migrate RAILS_ENV=development'
docker-compose run app bash -l -c 'bundle exec rake db:seed RAILS_ENV=development'

docker-compose up -d

Run tests

docker-compose run app bash -l -c 'bundle exec rake db:create RAILS_ENV=test'
docker-compose run app bash -l -c 'bundle exec rake db:test:prepare'
docker-compose run app bash -l -c 'bundle exec rspec'

If you want to run conversion process in the development environment, run the command as follows.

docker-compose run app bash -l -c 'bin/rails runner -e development "require \"./lib/slide_hub/batch\"; Batch.execute"'

Register batch procedure to cron (If you do not use Docker)

  • Handling uploaded slides (Mandatory)
*/1 * * * * /bin/bash -lc 'export PATH="/root/.rbenv/bin:$PATH" ; eval "$(rbenv init -)"; cd /opt/application/current ; bin/rails runner -e production "require \"./lib/slide_hub/batch\"; Batch.execute"'
  • Generating sitemap and send it to Google and Bing (Optional)
0 3 * * * /bin/bash -lc 'source /etc/environment ; export PATH="$HOME/.rbenv/bin:$PATH" ; eval "$(rbenv init -)"; cd /opt/application/current ; bin/rake  sitemap:refresh RAILS_ENV=production'

Login to the app

Default account is [email protected] and the password is passw0rd. You need to change this account's password after the first login.

Run rubocop or other tools on Mac OS

When running some commands in your MacOS, you need to install some dependencies for installing gem files.

brew install freetds
brew install [email protected]
brew link --force [email protected]
brew install pkg-config
brew install libmagic
bundle

Contributing

  1. Fork the repository on Github
  2. Create a named feature branch (like add_component_x)
  3. Write your change
  4. Write tests for your change (if applicable)
  5. Run the tests, ensuring they all pass
  6. Submit a Pull Request using Github

License

MIT License

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].